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)
但我很好奇为什么在我的第一种情况下用不同的标签标记了实例.有什么建议?
我最好的理解是从不使用整个布朗语料库的人那里发现了这个:
请注意,标记器以前没有看到的单词(例如已解除的)会收到None标记.
所以,我想看起来像的东西ae1.111必须出现在语料库文件中,但没有ae0.842.这有点奇怪,但这是给出-NONE-标签的原因.
编辑:我非常好奇,自己下载了布朗语料库,并在里面进行了纯文本搜索.该号码111出现在其中34次,并且该号码842仅出现4次.842仅出现在美元金额中间或作为一年的最后3位数,并且单独出现111多次作为页码.775也会出现一次作为页码.
所以,我要做一个猜想,因为根据本福德定律,你最终将匹配以1s,2s和3s开头的数字,而不是以8s或9s开头的数字,因为这些数字通常是将在书中引用的随机页面的页码.我真的很想知道这是否属实(但当然没有足够的兴趣自己做!).