ngram分数计算不适用于python3

时间:2019-02-05 07:57:25

标签: python python-3.x python-2.7

我正在尝试使用this script计算给定字符串的ngram适应性。当与this text file of quadgram statistics一起用于给定的字符串时,这应该给我一个适合度得分。由于此脚本是在Python 2中编写的,因此我使用file()-> open(),itervalues()-> values和xrange()-> range()对Python 3进行了修改。修改后的脚本如下:

from math import log10

class ngram_score(object):
    def __init__(self,ngramfile,sep=' '):
        ''' load a file containing ngrams and counts, calculate log probabilities '''
        self.ngrams = {}
        for line in open(ngramfile):
            key,count = line.split(sep) 
            self.ngrams[key] = int(count)
        self.L = len(key)
        self.N = sum(self.ngrams.values())
        #calculate log probabilities
        for key in self.ngrams.keys():
            self.ngrams[key] = log10(float(self.ngrams[key])/self.N)
        self.floor = log10(0.01/self.N)

    def score(self,text):
        ''' compute the score of text '''
        score = 0
        ngrams = self.ngrams.__getitem__
        for i in range(len(text)-self.L+1):
            if text[i:i+self.L] in self.ngrams: score += ngrams(text[i:i+self.L])
            else: score += self.floor          
        return score

脚本可以运行,但是很遗憾,某些数学运算无法正常工作。其中,它应该为每个字符串计算一个唯一值,而对于相同长度的字符串(即)计算相同的适应性得分。 “秃鹰”和“运动”的适应度得分不同,但是“秃鹰”和“垃圾(或任何7个字母的字符串)”的适应度得分相同。

我认为数学运算不应随Python版本而变化,但显然是这样。我想念什么?

0 个答案:

没有答案