2013-06-20 38 views
1

我相對較新並且學習了python。我正在嘗試編寫一個應用程序,該程序將接收用戶提供的單詞,並對該單詞提供一些備用建議。似乎nltk擁有我所需要的大部分內容。我一直在看一些例子,並已能夠得到它的工作如下:試圖從nltk獲得縮略詞

from nltk.corpus import wordnet as wn 
    for lemma in wn.synset('car.n.01').lemmas: 
     print lemma, lemma.count() 

這工作正常。我發現的問題是,如果用戶拼錯或複數化的話,那麼我得到一個崩潰:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/nltk-2.0.1rc1-py2.6.egg/nltk/corpus/reader/wordnet.py", line 1035, in synset 
    raise WordNetError(message % (lemma, pos)) 
nltk.corpus.reader.wordnet.WordNetError: no lemma 'cars' with part of speech 'n' 

基於這個錯誤,它看起來像它無法找到「汽車」作爲一個名詞。有沒有辦法進行搜索以查看該單詞是否被找到,或者更好的實現方法?

回答

1

我覺得你不是要求WORDNET的正確方法:

>>> wn.synsets('cars') 
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), 
Synset('car.n.04'), Synset('cable_car.n.01')] 

現在:

>>> for synset in wn.synsets('cars'): 
... synset.lemmas 
[Lemma('car.n.01.car'), Lemma('car.n.01.auto'), 
Lemma('car.n.01.automobile'),Lemma('car.n.01.machine'), 
Lemma('car.n.01.motorcar')]... 

對於拼寫錯誤的事情,我不認爲有NLTK內置功能。你可以:

  1. 使用庫如pyenchant,它提供了訪問一些不錯的C庫(Myspell,Hunspell)。國際海事組織的主要問題是,對於拼錯的單詞你沒有得到許多不同的建議。
  2. 檢查一下用戶提交的單詞,並提出替代拼寫。這不是什麼大不了的事。你可以通過研究this program(或直接使用它)開始,它提供了一個很好的例子,說明如何在單詞列表上建立克索引。

要獲取有關引理的相關信息:

>>> # get one of the lemmas 
>>> lemma = wn.synsets('cars')[0].lemmas[0] 
>>> lemma 
Lemma('car.n.01.car') 
>>> dir(lemma) 
[...'antonyms', 'attributes', 'causes', 'count', 
'derivationally_related_forms', 'entailments', 'frame_ids'... 'name'...] 
>>> lemma.name 
'car' 

使用dir每個對象以檢查它的屬性,並嘗試的東西出來:)

+0

@thefourtheye - 謝謝你再次回答我的問題。現在我可以問一下,是否有方法可以輕鬆地從car.n.01.auto等中提取單詞? – user2495294

+0

感謝 - 這很有幫助 – user2495294

+0

剛纔看着這個。它如何處理OCP(口服避孕藥)或美國或WHO(世界衛生組織)等縮略詞? – wakamdr