python - 词性标注是确定性的吗?

标签 python nlp machine-learning nltk

我一直在努力思考为什么会发生这种情况,但我希望有人能对此有所说明。我正在尝试标记以下文本:

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/

相关文章:

python - 多态一对多关系,其中 "many"属于不同子类

python - InvalidArgumentError : 2 root error(s) found. Tensorflow 文本分类模型中的形状不兼容

python - SHAP 摘要图和平均值一起显示

python - 在Python中提取文本特征的最佳方法是什么

machine-learning - 如何更改 Xgboost 中的特征重要性

python - 当字符串可能不包含模式或所有 n 元素时,如何在 Python 中可靠地拆分字符串?

python - pip install PIL -E TICKETS-1 - 不支持 JPEG/PNG

python - migrations.RunPython 可以运行任意 python 代码吗?

machine-learning - 方面提取的监督学习方法

machine-learning - 如何查看每个单词的 tf-idf 分数