2013-10-26 5 views
1

Прочитав How to write a spelling corrector от Peter Norvig, я попытался заставить код работать на персидский язык. Я переписал код вроде этого:Корректор орфографии для неанглийских символов

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 = 'ا آ ب پ ت ث ج چ ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی ء' 

В исходном коде Норвига, в NWORDS является словарем, который записывает слова и их число вхождений в тексте. Я попробовал print (NWORDS), чтобы узнать, работает ли он с персидскими символами, но результат не имеет значения. Он не учитывает слова, он считает появление отдельных букв.

Кто-нибудь знает, где код поступил не так?

P.S. 'text.txt' на самом деле является длинной конкатенацией персидских текстов, как и ее эквивалент в коде Норвига.

ответ

1

Вы применяете normalizer к файловому объекту.

Я подозреваю, что вы действительно хотите делать что-то вроде этого

with open('text.txt') as fin: 
    Nwords = trian(normalizer(word) for ln in fin for word in ln.split())) 

Я также хотел бы посмотреть в использовании Counterhttp://docs.python.org/2/library/collections.html#collections.Counter

+1

и вы, вероятно, хотите, чтобы убедиться, что вы удаляете знаки препинания – tacaswell

+0

Спасибо большое! Это было очень полезно. – Omid

+0

У вас это получилось? У меня возникли проблемы с преобразованием орфографического чека на датский с буквами ÆØÅ – boje