我一直在试图理解为什么会发生这种情况,希望有人能对此提供一些见解。我试图标记以下文本:
ae0.475 X mod ae0.842 X modae0.842 X mod ae0.775 X mod
使用以下代码:
import nltkfile = 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
我不明白这是怎么回事。有人知道这种不一致的原因吗?我对词性标注的准确性不是很在意,因为我试图提取一些模板,但似乎在不同实例中对看起来“几乎”相同的词使用了不同的标签。
作为解决方案,我将所有数字替换为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
但我很好奇为什么在我的第一个案例中它会对不同的实例标记不同的标签。有什么建议吗?
回答:
我尽力理解后发现这个来自一个没有使用整个布朗语料库的人的说法:
请注意,标记器之前未见过的词,如decried,会被标记为None。
所以,我猜像ae1.111
这样的东西一定出现在语料库文件中,但像ae0.842
这样的东西却没有。这有点奇怪,但这就是给出-NONE-
标签的理由。
编辑:我非常好奇,自己下载了布朗语料库,并在其中进行了纯文本搜索。数字111
在其中出现了34次,而数字842
只出现了4次。842
只出现在美元金额的中间或作为年份的最后三位数字,而111
多次单独作为页码出现。775
也作为页码出现了一次。
所以,我要做一个猜想,由于本福德定律,你会更频繁地匹配以1、2和3开头的数字,而不是以8或9开头的数字,因为这些数字更常作为书中随机引用的页码。我很想知道这是否属实(但当然,我自己没有兴趣去做这件事!)。