python - 使用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']
我期望得到相同数量的名词,但事实并非如此。我究竟做错了什么?
解决方案
摘要:GIGO(垃圾输入 => 垃圾输出)。
正如评论所暗示的,词序很重要。英语中充斥着可以充当多个词类的单词,具体取决于在短语中的位置。考虑:
You can cage a swallow.
You cannot swallow a cage.
在您呈现的第二个文本中,您无论如何都没有合法的句子。英语解析器可以确定的最好的结果是“end”可能是动词“like”的直接宾语,因此在这种情况下是名词。同样,“旅程”似乎是第二个单词序列的主要动词。
推荐阅读
- c++ - C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- javascript - 无法让我的主导航作为粘性导航执行
- csv - netlogo 导出到 csv
- php - 获取循环的结果并将它们放入新数组中(在 PHP 中)
- ios - 离子应用内购买
- node.js - 如何进行多个 API 调用
- html - 在悬停时显示 div 并使其可滚动
- swift - 带有多个参数的 Swift 闭包
- macos - 更改 pip 安装路径;OSError: [Errno 20] 不是目录
- node.js - Inquirer.js:如果一个提示为真,则询问多个问题