niedziela, kwietnia 15, 2007

Jak automatycznie zmienić słowo "laka" w "łąka"? :-)

Bazując na prostym spell checkerze, który opisywałem w poprzednim wpisie postanowiłem sprawdzić, czy można by było zautomatyzować proces zamiany tekstów zapisanych "polskawym" na takie z polskimi znakami :-)Samo rozwiązanie wydaje się być proste, w przypadku tekstu zapisanego "polskawym" czyli bez polskich znaków wystarczy rozważyć tylko kandydaturę słów, które powstaną poprzez zamianę odpowiedników polskiej literki na polską literkę.Np. dla słowa "laka", sprawdzić musimy: "laka", "laką", "ląka", "ląką", "łaka", "łaką", "łąka", "łąką". Sensownymi słowami są "łąka" i "łąką", wybieramy więc to które było bardziej prawdopodobne w tekście uczącym.Oczywiście może wprowadzić to nowy błąd :-) Wydaje się jednak, że tak automatycznie "upolskowiony" tekst będzie łatwiej poprawić niż ręcznie zmieniać cały tekst zapisany "polskawym".W celu stworzenia narzędzia poprawiającego tekst bez polskich liter na taki z polskimi znakami wystarczy w kodzie Petera Norviga zmienić definicję funkcji words i edits1:
def words(text): return re.findall('[a-z,ąćęłńóśżź]+', text.lower()) [...]pl = 'ąćęłńóśżź'pd = 'acelnoszz'def edits1(word): n=len(word) m=len(pd) z=set([word[0:i]+pl[c]+word[i+1:] for i in range(n) for c in range(m) if word[i:i+1]==pd[c]]) return z
Dla przykładu tłumacz nauczony tekstem książki "Ostatni rozdział czyli paragraf 22 bis" tekst "Ten ktory wyszedl, nie poszedl sobie stad. On poszedl precz, bo mu sie tu nie podobalo" przetworzył na "ten który wyszedl, nie poszedł sobie stąd on poszedł precz, bo mu sie tu nie podobało".Błędne pozostawienie "sie" wynika z faktu, iż w tekście było troszkę niemieckich wstawek, a więc i słowo "sie" zostało uznane za nieskończenie bardziej prawdopodobnie niż słowo "się" [szczegóły dlaczego tak, a nie inaczej w artykule Petera Norviga :-)]Mimo wszystko skuteczność na poziomie 70% byłaby niezła :-)


Podobne postybeta
Prosty spell checker, czyli jak umiejętnie połączyć teorie z praktyką
Ciekawy artykuł
Testowanie upolskawiacza
Statystyka
Plan lekcji - wersja hard ;-)