POS标签是否具有确定性?

Leg*_*end 8 python nlp machine-learning nltk

我一直在试图解决为什么会发生这种情况,但我希望有人可以对此有所了解.我想标记以下文字:

ae0.475      X  mod 
ae0.842      X  mod
ae0.842      X  mod 
ae0.775      X  mod 
Run Code Online (Sandbox Code Playgroud)

使用以下代码:

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
Run Code Online (Sandbox Code Playgroud)

并得到以下结果:

['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
Run Code Online (Sandbox Code Playgroud)

我不明白.有谁知道这种不一致的原因是什么?我对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
Run Code Online (Sandbox Code Playgroud)

但我很好奇为什么在我的第一种情况下用不同的标签标记了实例.有什么建议?

Chr*_*ham 8

我最好的理解是从不使用整个布朗语料库的人那里发现了这个:

请注意,标记器以前没有看到的单词(例如已解除的)会收到None标记.

所以,我想看起来像的东西ae1.111必须出现在语料库文件中,但没有ae0.842.这有点奇怪,但这是给出-NONE-标签的原因.

编辑:我非常好奇,自己下载了布朗语料库,并在里面进行了纯文本搜索.该号码111出现在其中34次,并且该号码842仅出现4次.842仅出现在美元金额中间或作为一年的最后3位数,并且单独出现111多次作为页码.775也会出现一次作为页码.

所以,我要做一个猜想,因为根据本福德定律,你最终将匹配以1s,2s和3s开头的数字,而不是以8s或9s开头的数字,因为这些数字通常是将在书中引用的随机页面的页码.我真的很想知道这是否属实(但当然没有足够的兴趣自己做!).