阅读Peter Norvig的How to write a spelling corrector后,我试图让代码适用于波斯语。我重写了这样的代码:
import re, collections
def normalizer(word):
word = word.replace('ي', 'ی')
word = word.replace('ك', 'ک')
word = word.replace('ٔ', '')
return word
def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model
NWORDS = train(normalizer(open("text.txt", encoding="UTF-8").read()))
alphabet = 'ا آ ب پ ت ث ج چ ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی ء'
在Norvig的原始代码中,NWORDS是一个字典,用于记录文本中出现的单词及其出现次数。我试过print (NWORDS)
看看它是否适用于波斯字符,但结果无关紧要。它不计算单词,它计算单独字母的外观。
有没有人知道代码出错的地方?
P.S。 'text.txt'实际上是波斯语文本的长连接,就像它在Norvig代码中的等价物一样。
答案 0 :(得分:1)
您正在将normalizer
应用于文件对象。
我怀疑你真的想做这样的事情
with open('text.txt') as fin:
Nwords = trian(normalizer(word) for ln in fin for word in ln.split()))
我还会考虑使用Counter
http://docs.python.org/2/library/collections.html#collections.Counter