我一直在努力思考为什么会发生这种情况,但我希望有人能对此有所说明。我正在尝试标记以下文本:
ae0.475 X mod
ae0.842 X mod
ae0.842 X mod
ae0.775 X mod
使用以下代码:
import nltk
file = open("test", "r")
for line in file:
words = line.strip().split(' ')
words = [word.strip() for word in words if word != '']
tags = nltk.pos_tag(words)
pos = [tags[x][1] for x in range(len(tags))]
key = ' '.join(pos)
print words, " : ", key
得到以下结果:
['ae0.475', 'X', 'mod'] : NN NNP NN
['ae0.842', 'X', 'mod'] : -NONE- NNP NN
['ae0.842', 'X', 'mod'] : -NONE- NNP NN
['ae0.775', 'X', 'mod'] : NN NNP NN
我不明白。有谁知道这种不一致的原因是什么?我对 pos 标记的准确性不是很在意,因为我试图提取一些模板,但它似乎在不同的实例中使用不同的标记来表示一个看起来“几乎”相同的词。
作为解决方案,我将所有数字替换为 1 并解决了问题:
['ae1.111', 'X', 'mod'] : NN NNP NN
['ae1.111', 'X', 'mod'] : NN NNP NN
['ae1.111', 'X', 'mod'] : NN NNP NN
['ae1.111', 'X', 'mod'] : NN NNP NN
但我很好奇为什么它在我的第一个案例中用不同的标签标记了实例。有什么建议吗?
最佳答案
我尽最大努力了解未发现的 this来自不使用整个 Brown 语料库的人:
Note that words that the tagger has not seen before, such as decried, receive a tag of None.
所以,我猜像 ae1.111
的东西一定出现在语料库文件中,但没有像 ae0.842
的东西。这有点奇怪,但这就是给出 -NONE-
标签的原因。
编辑:我 super 好奇,downloaded the Brown corpus我自己,并在其中进行纯文本搜索。数字 111
在其中出现了 34 次,而数字 842
只出现了 4 次。 842
仅出现在美元金额的中间或年份的最后 3 位数字,而 111
多次单独作为页码出现。 775
也作为页码出现一次。
所以,我要做出一个猜想,因为 Benford's Law ,与以 8 或 9 开头的数字相比,您最终会更频繁地匹配以 1、2 和 3 开头的数字,因为这些数字通常是书中会引用的随机页面的页码。我真的很想知道这是不是真的(当然,我没有足够的兴趣自己去做!)。
关于python - 词性标注是确定性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541141/