2013-06-20 40 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