python - 为什么 NLTK 的 PoS 标注器对单词中的每个字母进行标记,而不是对每个单词进行标记?
问题描述
说我有这句话:I am a boy
。我想找出句子中每个单词的词性。这是我的代码:
import nltk
sentence = 'I am a good boy'
for word in sentence:
print(word)
print(nltk.pos_tag(word))
但这会产生以下输出:
I
[('I', 'PRP')]
[(' ', 'NN')]
a
[('a', 'DT')]
m
[('m', 'NN')]
[(' ', 'NN')]
a
[('a', 'DT')]
[(' ', 'NN')]
g
[('g', 'NN')]
o
[('o', 'NN')]
o
[('o', 'NN')]
d
[('d', 'NN')]
[(' ', 'NN')]
b
[('b', 'NN')]
o
[('o', 'NN')]
y
[('y', 'NN')]
所以,我试着这样做:
sentence = 'I am a good boy'
for word in sentence.split(' '):
print(word)
print(nltk.pos_tag(word))
这会产生以下输出:
I
[('I', 'PRP')]
am
[('a', 'DT'), ('m', 'NN')]
a
[('a', 'DT')]
good
[('g', 'NN'), ('o', 'MD'), ('o', 'VB'), ('d', 'NN')]
boy
[('b', 'NN'), ('o', 'NN'), ('y', 'NN')]
为什么要为每个字母而不是每个单词找到 PoS?我该如何解决这个问题?
解决方案
nltk.pos_tag
将列表或类似列表的事物作为参数处理,并标记其中的每个元素。因此,在您的第二个示例中,它将每个字符串(即每个单词)拆分为字母,就像在第一个示例中将句子拆分为字母一样。当您传入从拆分句子中获得的整个列表时,它会起作用:
>>> nltk.pos_tag(sentence.split(" "))
[('I', 'PRP'), ('am', 'VBP'), ('a', 'DT'), ('good', 'JJ'), ('boy', 'NN')]
根据文档,您通常会传入 NLTK 的标记化返回的内容(即单词/标记列表)。
推荐阅读
- c++ - 范围解决优先级
- excel - 等到 Excel 完成使用 VBA 填充 Bloomberg 数据
- html - 定位/调整背景图像的问题
- c# - 检查具有未知级别的嵌套列表中的属性值
- python - 使用 python 比较一个文件与另一个文件是否缺少条目
- ionic-framework - cordova-plugin-iosrtc 不适用于 sip.js 0.11 在movile ionic js webrtc 应用程序上
- sql - SQL Server 将字符串转换为日期
- angular - 授权0。如何防止自动登录
- python - python:用于打开具有两个函数的文件的“with”语法
- python - 没有字典的 Python Winzip 密码测试器