Python 试图从nltk中获取首字母缩略词

Python 试图从nltk中获取首字母缩略词,python,nltk,Python,Nltk,我比较新,正在学习python。我正试图写一个应用程序,将采取一个字的用户提供的,并提供一些替代的建议对这个字。似乎nltk拥有我所需要的大部分。我一直在看一些例子,并已能够使其工作如下: from nltk.corpus import wordnet as wn for lemma in wn.synset('car.n.01').lemmas: print lemma, lemma.count() 这个很好用。我发现的问题是,如果用户拼错或将单词复数,那么我会崩溃:

我比较新,正在学习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'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist packages/nltk-2.0.1rc1-py2.6.egg/nltk/corpus/reader/wordnet.py”,第1035行,语法集中
引发WordNetError(消息%(引理,位置))
nltk.corpus.reader.wordnet.WordNetError:没有带词性“n”的引理“cars”

基于这个错误,它似乎找不到“cars”作为名词。有没有办法进行搜索以查看是否找到该词,或者有更好的方法来实现这一点

我认为你给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')]
现在:

至于拼写错误,我认为NLTK没有内置功能。您可以:

  • 使用类似于
    pyenchant
    的库,它提供了对一些不错的C库(Myspell、Hunspell)的访问。在我看来,主要的问题是,对于拼写错误的单词,你没有得到很多不同的建议
  • 检查用户提交的单词,并建议其他拼写。这没什么大不了的。您可以从研究什么开始(或直接使用它),这提供了一个很好的示例,说明如何在单词列表上构建gram索引 要获取有关引理的信息:

    >>> # 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
    检查其属性,然后尝试:)

    我认为您调用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')]
    
    现在:

    至于拼写错误,我认为NLTK没有内置功能。您可以:

  • 使用类似于
    pyenchant
    的库,它提供了对一些不错的C库(Myspell、Hunspell)的访问。在我看来,主要的问题是,对于拼写错误的单词,你没有得到很多不同的建议
  • 检查用户提交的单词,并建议其他拼写。这没什么大不了的。您可以从研究什么开始(或直接使用它),这提供了一个很好的示例,说明如何在单词列表上构建gram索引 要获取有关引理的信息:

    >>> # 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
    检查其属性,然后尝试:)

    @thefourtheye-谢谢您再次回答了我的问题。现在我想问一下,是否有一种方法可以轻松地从car.n.01.auto等中提取单词?我一直在看这个。它如何处理诸如OCP(口服避孕药)或美国,或WHO(世界卫生组织)之类的首字母缩略词?谢谢你再次回答了我的问题。现在我想问一下,是否有一种方法可以轻松地从car.n.01.auto等中提取单词?我一直在看这个。它如何处理诸如OCP(口服避孕药)、美国或WHO(世界卫生组织)等首字母缩写词?