【发布时间】:2017-10-12 15:36:44
【问题描述】:
我想使用文本文件作为输入来评估 NLTK 中的不同 POS 标签。
例如,我将使用 Unigram 标注器。我发现了如何使用棕色语料库评估 Unigram 标签。
from nltk.corpus import brown
import nltk
brown_tagged_sents = brown.tagged_sents(categories='news')
brown_sents = brown.sents(categories='news')
# We train a UnigramTagger by specifying tagged sentence data as a parameter
# when we initialize the tagger.
unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
print(unigram_tagger.tag(brown_sents[2007]))
print(unigram_tagger.evaluate(brown_tagged_sents))
它产生如下输出。
[('Various', 'JJ'), ('of', 'IN'), ('the', 'AT'), ('apartments', 'NNS'), ('are', 'BER'), ('of', 'IN'), ('the', 'AT'), ('terrace', 'NN'), ('type', 'NN'), (',', ','), ('being', 'BEG'), ('on', 'IN'), ('the', 'AT'), ('ground', 'NN'), ('floor', 'NN'), ('so', 'QL'), ('that', 'CS'), ('entrance', 'NN'), ('is', 'BEZ'), ('direct', 'JJ'), ('.', '.')]
0.9349006503968017
以类似的方式,我想从文本文件中读取文本并评估不同 POS 标记器的准确性。
我想出了如何读取文本文件以及如何为令牌应用 pos 标签。
import nltk
from nltk.corpus import brown
from nltk.corpus import state_union
brown_tagged_sents = brown.tagged_sents(categories='news')
sample_text = state_union.raw(
r"C:\pythonprojects\tagger_nlt\new-testing.txt")
tokens = nltk.word_tokenize(sample_text)
default_tagger = nltk.UnigramTagger(brown_tagged_sents)
default_tagger.tag(tokens)
print(default_tagger.tag(tokens))
[('Honestly', None), ('last', 'AP'), ('seven', 'CD'), ('lectures', None), ('are', 'BER'), ('good', 'JJ'), ('.', '.'), ('Lectures', None), ('are', 'BER'), ('understandable', 'JJ')
我想要的是一个类似 default_tagger.evaluate() 的分数,这样我就可以使用相同的输入文件比较 NLTK 中的不同 POS 标记器,以确定最适合给定的 POS 标记器文件。
任何帮助将不胜感激。
【问题讨论】:
-
您的测试句子需要真实标签。您要么使用现有的标记句子集(如您在第一个示例中使用的布朗语料库),要么找一些精通英语且愿意手动标记句子的语言学家。
-
@Yash 您正在尝试做的事情与您现在正在做的事情不同。您正在传递命令
default_tagger.tag(tokens)并标记您的原始令牌。您应该提供手动标记的数据,以便能够评估标记器。
标签: python nlp nltk linguistics pos-tagger