我想采用这个标记文本(格式如此)并找到每个句子中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部分,我不知道如何绕过(我不知道如何定义它是什么)。我希望这段代码能够应用于数百个具有相同格式的句子。我知道代码存在很多问题,所以如果有人可以请他们纠正,我会非常感激。
答案 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(不是关于句子分配)。 但话又说回来,不确定这是否是你所追求的。