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