2016-12-24 78 views
0

我想要带这个标签文本(如此格式化)并找到每个句子中pos-tag DT的平均频率。恩。 DT在句子1中出现1/3字,在句子2中出现1/3字。然后我想把这些加起来除以文本中的句子数(本例中为2)。这会给我每句话DT的平均外观。平均POS标签频率

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

我不知道我明白你在问什么。你想知道如何将数百个句子分配给变量'eachSentence'吗? – oschlueter

回答

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(不涉及句子分布)。 但是,然后再次,不知道这是否是你之后。

+0

我在一个文件上试过你的代码。我的文件内容如下所示:[[('In','IN'),'''''','''','','DT'),('players','NNS') ('''','IN'),('discarding','VBG'),(',',','),('always','RB')]]。现在是'tag = tupl [1]'行处出现索引错误,索引1超出范围的问题。我不明白为什么。 – Bambi