2016-12-24 79 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