我比较新,学习python。我正在尝试编写一个应用程序,该应用程序将提取用户提供的单词并提供有关该单词的其他建议。似乎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'
基于此错误,它看起来无法找到'cars'作为名词。有没有办法进行搜索,看看是否找到了这个词,或者更好的方法来实现这个?
答案 0 :(得分: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没有内置功能。你可以:
pyenchant
这样的库,它可以访问一些不错的C库(Myspell,Hunspell)。 IMO的主要问题是,对于拼写错误的单词,你没有得到很多不同的建议。获取有关引理的信息:
>>> # 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
来检查它的属性,然后尝试一下:)