如何用单字组分割双字母对的频率?

时间:2016-04-22 03:58:19

标签: python

下面是我的代码。

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频率除以第一个出现的单字组频率。 (例如,如果有一个二元组('红色','苹果')并且其频率为“3”,那么我想将其除以“红色”的频率。 这是为了获得MLE概率,即“MLE概率=(w1,w2)的计数/(w1)的计数”。帮帮我...

1 个答案:

答案 0 :(得分:0)

您可以在for循环中添加以下内容(在打印k,v之后):

number_unigrams = tokens.count(k[0])
prob = v / number_unigrams

那应该给你每个二元组的MLE概率。