【问题标题】:How to find out wether a word exists in english using nltk如何使用 nltk 找出英语中是否存在单词
【发布时间】:2015-05-19 21:54:35
【问题描述】:

我正在为这个问题寻找合适的解决方案。这个问题之前已经被问过很多次了,我没有找到一个合适的答案。 我需要在NLTK中使用语料库来检测一个单词是否是英文单词

我已经尝试过:

wordnet.synsets(word)

这不适用于许多常用词。 使用英语单词列表并在文件中执行查找不是一种选择。 使用附魔也不是一种选择。 如果有其他库可以做同样的事情,请提供 api 的用法。 如果没有,请提供一个nltk语料库,其中包含所有英文单词。

【问题讨论】:

    标签: python python-3.x nlp nltk wordnet


    【解决方案1】:

    NLTK includes some corpora 只不过是词表。单词语料库是来自 Unix 的 /usr/share/dict/words 文件,被一些拼写检查器使用。我们可以使用它在文本语料库中查找异常或拼写错误的单词,如下所示:

    def unusual_words(text):
        text_vocab = set(w.lower() for w in text.split() if w.isalpha())
        english_vocab = set(w.lower() for w in nltk.corpus.words.words())
        unusual = text_vocab - english_vocab
        return sorted(unusual)
    

    在这种情况下,您可以使用 english_vocab 检查您的单词的成员。

    >>> import nltk
    >>> english_vocab = set(w.lower() for w in nltk.corpus.words.words())
    >>> 'a' in english_vocab
    True
    >>> 'this' in english_vocab
    True
    >>> 'nothing' in english_vocab
    True
    >>> 'nothingg' in english_vocab
    False
    >>> 'corpus' in english_vocab
    True
    >>> 'Terminology'.lower() in english_vocab
    True
    >>> 'sorted' in english_vocab
    True
    

    【讨论】:

    • 您知道更快的方法吗?每次验证都需要很长时间
    • @NicoCoallier 您是否使用基于set 的方法?
    • 我正在尝试识别英文句子.. stackoverflow.com/questions/43922087/…
    • @NicoCoallier 您是否使用过unusual_words 函数,我更新了函数,因为似乎应该拆分text 参数以便对单词而不是字符执行操作:-)。您可以使用更新的版本。
    • 为此干杯,我会试试的!你有想法解决我的帖子吗?
    【解决方案2】:

    我尝试了上述方法,但是对于应该存在的许多单词,所以我尝试了 wordnet。我认为这有更全面的词汇。-

    from nltk.corpus import wordnet if wordnet.synsets(word): #Do something else: #Do some otherthing

    【讨论】:

      【解决方案3】:

      根据我的经验,找到了 NTLK 的两个选项:

      1:

      from nltk.corpus import words
      
      unknown_word = []
      
      if token not in words.words():    
          unknown_word.append(token)
      

      2:

      from nltk.corpus import wordnet
      
      unknown_word = []
      
      if len(wordnet.synsets(token)) == 0:    
          unknown_word.append(token)
      

      选项 2 的性能更好。选项 2 中捕获了更多相关词。

      我会建议选择选项 2。

      【讨论】:

      • 对于方法2:wordnet,很多常见的有效词(of、an、the、and、about、above、because等)使用这种方法会被归类为未知,因为“WordNet只包含”open类词“:名词、动词、形容词和副词。因此,排除的词包括限定词、介词、代词、连词和助词。”见wordnet.princeton.edu/frequently-asked-questions
      猜你喜欢
      • 2020-08-05
      • 2017-12-11
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多