首页 > 解决方案 > 使用nltk从句子和倒置句子中获取名词时我错过了什么?

问题描述

我有一个is_noun使用定义nltk

is_noun = lambda pos: pos == 'NN' or pos == 'NNP' or pos == 'NNS' or pos == 'NNPS'

然后我在一个函数中有这个:

def test(text):
    tokenized = nltk.word_tokenize(text)
    nouns = [word for (word, pos) in nltk.pos_tag(tokenized) if is_noun(pos)]  
    print ('Nouns:', nouns)
    return nouns

然后我调用函数:

test('When will this long and tedious journey ever end? Like all good')

并得到:

Nouns: ['journey']

然后调用相同的函数,但使用相反的句子并得到:

test('good all Like end? ever journey tedious and long this will When')

结果:

  Nouns: ['end']

我期望得到相同数量的名词,但事实并非如此。我究竟做错了什么?

标签: pythonnltk

解决方案


摘要:GIGO(垃圾输入 => 垃圾输出)。

正如评论所暗示的,词序很重要。英语中充斥着可以充当多个词类的单词,具体取决于在短语中的位置。考虑:

You can cage a swallow.
You cannot swallow a cage.

在您呈现的第二个文本中,您无论如何都没有合法的句子。英语解析器可以确定的最好的结果是“end”可能是动词“like”的直接宾语,因此在这种情况下是名词。同样,“旅程”似乎是第二个单词序列的主要动词。


推荐阅读