2015-01-19 42 views
6

Với từ nhập, tôi muốn xác định xem đó có phải là danh từ hay không (trong trường hợp mơ hồ), ví dụ cook có thể là danh từ hoặc động từ. như một danh từ).Xác định một từ có phải là danh từ hay không

Thực ra tôi sử dụng trình gắn thẻ POS từ trình phân tích cú pháp Stanford (tôi cho nó một từ làm đầu vào và tôi chỉ trích xuất thẻ POS từ kết quả). Kết quả khá tốt nhưng phải mất một thời gian rất dài.

Có cách nào (bằng python, vui lòng không :) để thực hiện tác vụ này nhanh hơn những gì tôi thực sự làm?

+1

trình phân tích cú pháp stanford thực hiện rất nhiều thứ khác trên đầu vào (phân tích phụ thuộc, phân tích bầu cử ...). đây. Hơn nữa, không phải là gắn thẻ POS một chút quá mạnh mẽ hơn cho những gì tôi muốn làm (thường POS gắn thẻ được thực hiện trên một câu toàn bộ, không phải là một từ duy nhất)? – permanganate

Trả lời

5

Nếu bạn chỉ muốn kiểm tra xem một từ có thể được sử dụng làm danh từ hay không, cách nhanh nhất có thể là xây dựng một tập hợp tất cả các danh từ và sau đó chỉ kiểm tra từ thành viên của tập hợp đó.

Đối với một danh sách tất cả các danh từ bạn có thể sử dụng WordNet corpus (mà có thể được truy cập thông qua NLTK ví dụ):

>>> from nltk.corpus import wordnet as wn 
>>> nouns = {x.name().split('.', 1)[0] for x in wn.all_synsets('n')} 
>>> "cook" in nouns 
True 
>>> "and" in nouns 
False 
+0

đó là một khả năng, cảm ơn bạn :) nltk cung cấp 67176 danh từ, chúng ta không bị mất rất nhiều trong số họ (sử dụng một từ điển khác)? (Tôi nghĩ rằng bạn quên một '()' sau khi 'tên' trong mã của bạn) – permanganate

+0

Bạn có thể đúng: Tôi không chắc có bao nhiêu danh từ tiếng Anh! Bạn có thể tìm thấy một danh sách lớn hơn ở nơi khác để mở rộng trên những gì WordNet cung cấp. ('.name', không có dấu ngoặc đơn, có vẻ là cách chính xác để truy cập từ trên phiên bản Python và NLTK của tôi.) –

+0

Tôi tin' name' là một hàm và mã nên đọc 'nouns = {x. name(). split ('.', 1) [0] [...]} ' – Ponkadoodle

1

tôi không thể nói cho wrapper Python, nhưng nếu bạn sử dụng Stanford POS tagger thay vì trình phân tích cú pháp, nó sẽ nhanh hơn rất nhiều. Có các trình bao bọc cho Stanford CoreNLP, bao gồm trình gắn thẻ: https://pypi.python.org/pypi/corenlp-python; hoặc, có vẻ như nltk có mô-đun trình gắn thẻ Stanford quá http://www.nltk.org/_modules/nltk/tag/stanford.html.

Bạn cũng có thể nhận được kết quả tốt hơn nếu bạn nhúng một từ trong câu đồ chơi. Một cái gì đó như "The X là một điều." Tùy thuộc vào câu, điều này có thể thiên vị bạn hướng tới hoặc đi từ đoán từ như danh từ quá.

Các vấn đề liên quan