2016-12-24 15 views
0

Я хочу взять этот помеченный текст (отформатированный как таковой) и найти среднюю частоту DT-позиционной метки в каждом предложении. ех. DT появляется 1/3 слова в предложении1 и 1/3 слова в предложении2. Затем я хочу добавить их и разделить на количество предложений в тексте (2 в этом случае). Это даст мне средний внешний вид DT за предложение.Средняя частота POS-TAG

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

Я не уверен, что понимаю, что вы просите. Вы хотите знать, как вы можете назначить свои сотни предложений переменной «everySentence»? – 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'), («помощь», «VBG»), («the», «DT») («игроки», «NNS») , ('after', 'IN'), ('отбрасывание', 'VBG'), (',', ','), ('always', 'RB')]]. Теперь проблема в том, что в строке 'tag = tupl [1]' я получаю индексную ошибку, индекс 1 выходит за пределы диапазона. Я не понимаю, почему. – Bambi