0
下面是我的代碼。如何通過單字區分雙字符對的頻率?
from __future__ import division
import nltk
import re
f = open('C:/Python27/brown_A1_half.txt', 'rU')
w = open('C:/Python27/brown_A1_half_Out.txt', 'w')
#to read whole file using read()
filecontents = f.read()
from nltk.tokenize import sent_tokenize
sent_tokenize_list = sent_tokenize(filecontents)
for sentence in sent_tokenize_list:
sentence = "Start " + sentence + " End"
tokens = sentence.split()
bigrams = (tuple(nltk.bigrams(tokens)))
bigrams_frequency = nltk.FreqDist(bigrams)
for k,v in bigrams_frequency.items():
print k, v
然後打印結果是「(bigrams),它的頻率」。這裏,我想要的是每個bigram對爲 ,以第一個出現的單字頻率除以二進制頻率。 (例如,如果有一個bigram('red','apple')並且其頻率爲「3」,那麼我想將它除以'red'的頻率)。 這是爲了獲得MLE概率,即「MLE概率=(w1,w2)/(w1)的計數」的計數。幫我PLZ ...
非常感謝。我可以再問兩個問題......?(我希望這不是違反這個網站的規則..)(1)如何根據最高頻率對k,v值進行排序? (2)第二,我要總結整個v值來做bigram的whlole計數... –
(1)要按頻率排序值,我不要不知道另一種解決方案,而是將所有頻率值複製到列表中並對其進行排序。你可以在你的循環中執行'freq_list.append(v)',然後調用'freq_list.sort()'。 (2)遍歷該列表並將值添加到sum變量(也可以在同一個循環中完成)。我不知道它是否違反規則,我自己也很新:D – divandc