平均POS-TAG频率

时间:2016-12-24 16:42:07

标签: python statistics nltk average pos-tagger

我想采用这个标记文本(格式如此)并找到每个句子中pos-tag DT的平均频率。恩。 DT在句子1中出现1/3个单词,在句子2中出现1/3个单词。然后我想添加它们并除以文本中的句子数(在这种情况下为2)。这将给出每个句子DT的平均外观。

 from collections import Counter
 import nltk

 tagged_text = [('A', 'DT'), ('hairy', 'NNS'), ('dog', 'NN')]
 [('The', 'DT'), ('mischevious', 'NNS'), ('elephant', 'NN')]

 for eachSentence in tagged_text:
     Counter(tag for word,tag in tagged)/len(eachsentence.split())

 total = sum(counts.values())

 float(average) = sum(counts.values())/len(tagged_text.sents())
 print(float(average))

对我来说最大的问题是eachSentence部分,我不知道如何绕过(我不知道如何定义它是什么)。我希望这段代码能够应用于数百个具有相同格式的句子。我知道代码存在很多问题,所以如果有人可以请他们纠正,我会非常感激。

1 个答案:

答案 0 :(得分:0)

我(也)不确定你在追求什么。在尝试将其添加到代码中之前,您可能应该尝试将您的想法/要求构建得更多(在您的头脑/纸上)。 根据您的描述和代码,我可以想到您之后的两个可能的数字,可以通过以下方式获得:

from collections import defaultdict

tagged_text = [[('A', 'DT'), ('hairy', 'NNS'), ('dog', 'NN')], [('The', 'DT'), ('mischevious', 'NNS'), ('elephant', 'NN')]]

d = defaultdict(int)
t = 0
for sentence in tagged_text:
    for tupl in sentence:
        tag = tupl[1]
        d[tag] += 1
        t += 1

for tag in d:
    print("Likelihood that %s appears in a sentence: %s" % (tag, str(float(d[tag] / len(tagged_text)))))
    print("Likelihood of %s appearing in complete corpus: %s" % (tag, str(float(d[tag] / t))))

导致

Likelihood that NN appears in a sentence: 1.0
Likelihood of NN in complete corpus: 0.3333333333333333
Likelihood that NNS appears in a sentence: 1.0
Likelihood of NNS in complete corpus: 0.3333333333333333
Likelihood that DT appears in a sentence: 1.0
Likelihood of DT in complete corpus: 0.3333333333333333

所有三个标签都出现在两个句子中,因此它出现在句子中的可能性为1.所有三个标签都出现两次(总共六个),因此它们出现的可能性为1/3(不是关于句子分配)。 但话又说回来,不确定这是否是你所追求的。