2
我想计算两个列表元素的点互信息分数。 比方说,我们有两个列表元素的PMI
ListA = "Hi there, This is only a test message. Please enjoy the weather in the park."
ListB = "work, bank, tree, weather, sun"
我怎样才能再计算所有对的PMI分数(工作,嗨),(工作,有),(工作,此)......(太阳,公园)。
它的工作对我来说,计算一个列表中bigram的采购经理人指数:
def pmi(word1, word2, unigram_freq, bigram_freq, unigram_freq_values, bigram_freq_values, output_name):
prob_word1 = unigram_freq[word1]/float(sum(unigram_freq_values))
prob_word2 = unigram_freq[word2]/float(sum(unigram_freq_values))
prob_word1_word2 = bigram_freq/float(sum(bigram_freq_values))
pmi = math.log(prob_word1_word2/float(prob_word1*prob_word2),2)
unigrams = nltk.FreqDist(ListA)
bigrams = ngrams(ListA,2)
n1_freq = nltk.FreqDist(unigrams)
n2_freq = nltk.FreqDist(bigrams)
output_pmi = "test.txt"
for bigram, freq in n2_freq.most_common(1000):
w1 = bigram[0]
w2 = bigram[1]
unigram_freq_val = n1_freq.values()
bigram_freq_val = n2_freq.values()
pmi(w1, w2, unigrams, freq, unigram_freq_val, bigram_freq_val, output_pmi)
我被困的问题,从计算和利斯塔的双字母组数组listB的PMI。如果有人能帮助我,我会非常感激。非常感谢!
(这两个名单是的,当然,我的任务是如何看起来像最小的例子。)
却怎么也之后,我计算这个组合的PMI?这是我仍然不清楚的部分。 – JohnD
是的,我也很难想到这一点。你能否给我一个关于PMI的描述,因为我有(忘记)那是什么。我已经做了我现在所能做的,但如果你能解释它,我可能会想出一个完整的解决方案来解决你的问题。另外,如果您认为我已经帮助过(或正在尝试提供帮助),那么请+1我的代码,因为它确实有帮助。谢谢! –