试图从nltk获得首字母缩略词

时间:2013-06-20 15:12:44

标签: python nltk

我比较新,学习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'作为名词。有没有办法进行搜索,看看是否找到了这个词,或者更好的方法来实现这个?

1 个答案:

答案 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没有内置功能。你可以:

  1. 使用像pyenchant这样的库,它可以访问一些不错的C库(Myspell,Hunspell)。 IMO的主要问题是,对于拼写错误的单词,你没有得到很多不同的建议。
  2. 检查用户提交的单词,并提出替代拼写。这不是什么大问题。您可以从研究this program(或直接使用它)的内容开始,这提供了如何在单词列表上构建克索引的一个很好的示例。
  3. 获取有关引理的信息:

    >>> # 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来检查它的属性,然后尝试一下:)