非英语字符的拼写校正器

时间:2013-10-26 01:49:48

标签: python regex python-3.x spelling

阅读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代码中的等价物一样。

1 个答案:

答案 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