2010-09-20 10 views
22

Sử dụng NLTK và WordNet, làm cách nào để chuyển đổi động từ đơn giản thành dạng phân từ hiện tại, quá khứ hoặc quá khứ?Sử dụng NLTK và WordNet; làm cách nào để chuyển đổi động từ đơn giản thành dạng phân từ hiện tại, quá khứ hoặc quá khứ của nó?

Ví dụ:

Tôi muốn viết một chức năng mà sẽ cho tôi động từ ở dạng dự kiến ​​như sau.

v = 'go' 
present = present_tense(v) 
print present # prints "going" 

past = past_tense(v) 
print past # prints "went" 
+0

Không ai có thể trả lời câu hỏi này? –

Trả lời

17

Tôi nghĩ rằng những gì bạn đang tìm kiếm là thư viện NodeBox::Linguistics. Nó thực hiện một cách chính xác rằng:

print en.verb.present("gave") 
>>> give 
+0

Rất tốt, tôi nghĩ rằng tôi đang tìm kiếm này chỉ ... Hãy để tôi thử nó. –

+0

có vẻ như nó có một số lỗi trong đó. Ví dụ en.is_verb ("tải xuống") trả về true, nhưng en.verb.present ("tải xuống") sẽ báo cáo một số lỗi – camino

+1

Thư viện đó không hoạt động với Python3, thật đáng buồn. – sudo

0

JWI (thư viện WordNet bởi MIT) cũng có một Stemmer (WordNetStemmer) mà chuyển đổi hình thức hình thái khác nhau của một từ tương tự ("bằng văn bản", "viết", "viết") để dạng cơ sở của họ. Có vẻ như nó chỉ hoạt động cho danh từ (như số nhiều) và động từ.

Word Stemming in Java with WordNet and JWNL cũng cho thấy làm thế nào để làm điều này loại bắt nguồn sử dụng JWNL, một Wordnet thư viện Java dựa trên:

14

Với sự giúp đỡ của NLTK này cũng có thể được thực hiện. Nó có thể cung cấp dạng cơ bản của động từ. Nhưng không phải là chính xác, nhưng nó vẫn có thể hữu ích. Hãy thử đoạn mã sau.

from nltk.stem.wordnet import WordNetLemmatizer 
words = ['gave','went','going','dating'] 
for word in words: 
    print word+"-->"+WordNetLemmatizer().lemmatize(word,'v') 

Đầu ra là:

gave-->give 
went-->go 
going-->go 
dating-->date 

Hãy nhìn vào Stack Overflow câu hỏi NLTK WordNet Lemmatizer: Shouldn't it lemmatize all inflections of a word?.

+0

Bạn nên cẩn thận với các từ có dạng thứ hai giống với từ khác của động từ. Ví dụ không may mắn cuối cùng của tôi là "ngã". WordNetLemmatizer không chuyển đổi nó thành 'fall' vì thực sự có một động từ 'rơi'. Một ví dụ khác là 'cảm thấy'. Và không có cách nào để nói với con lemmatizer rằng động từ ở dạng thứ hai. – Dany

+0

Câu trả lời cho nhận xét trước của tôi là sử dụng phương pháp "_morphy". Nó trả về danh sách các dạng cơ sở có thể. Nếu bạn biết rằng từ bạn đang cố gắng lemmatize không phải là ở dạng cơ bản của nó, bạn có thể loại trừ nó từ danh sách bạn nhận được từ '_morphy' và chọn một trong những phần còn lại. – Dany

2

Đối Python3:

git clone https://github.com/clips/pattern 
cd pattern 
git fetch 
git checkout development 
pip install mysqlclient 
python setup.py install 

sau đó

from pattern.en import conjugate, lemma, lexeme,PRESENT,SG 
print (lemma('gave')) 
print (lexeme('gave')) 
print (conjugate(verb='give',tense=PRESENT,number=SG)) # he/she/it 

mang

give ['give', 'gives', 'giving', 'gave', 'given'] gives

thnks để @Agargara để chỉ & tác giả của Mẫu cho công việc đẹp đẽ của họ, hãy ủng hộ họ ;-)