我正在尝试使用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版本而变化,但显然是这样。我想念什么?