我一直在试图解决为什么会这样,但我希望有人可以对此有所了解。我正在尝试标记以下文字:
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
但我很好奇为什么在我的第一种情况下用不同的标签标记了实例。有什么建议吗?
答案 0 :(得分:8)
我尽最大努力了解未使用整个布朗语料库的人发现的this:
请注意标记器具有的单词 以前没见过,比如嫁妆, 收到无标签。
所以,我想看起来像ae1.111
的内容必须出现在语料库文件中,但没有像ae0.842
那样。这有点奇怪,但这是给出-NONE-
标签的原因。
编辑:我非常好奇,downloaded the Brown corpus我自己,并在其中进行纯文本搜索。 111
号码显示在其中34次,而号码842
仅显示4次。 842
仅出现在美元金额中间或一年的最后3位数字中,111
单独出现多次作为页码。 775
也会作为页码出现一次。
所以,我要做一个猜想,因为Benford's Law,你最终会匹配以1s,2s和3s开头的数字,而不是以8s或9s开头的数字,因为这些通常是书中引用的随机页面的页码。我真的很想知道这是否属实(但当然没有足够的兴趣自己做!)。
答案 1 :(得分:3)
从某种意义上说,“确定性”是指同一个句子每次都使用相同的算法以相同的方式标记,但由于你的单词不在nltk的数据中(事实上,甚至不是真正的单词)在真正的句子中)它将使用一些算法来尝试推断标签是什么。这意味着当单词发生变化时,你可以有不同的标记(即使变化是一个与你不同的数字),并且标记无论如何都没有多大意义。
这让我想知道你为什么要尝试将NLP用于非自然语言结构。