Witam , czy istnieje jakis algorytm ktory podczas wpisywania wyrazu uwzgledni bledy np literowki badz bledy ortograficzne. Pomysl jak to napisac jako taki mam , ale czy istnieje jakis gotowy juz algorytm ktory moglbym zaadoptowac. Czy da sie tu wykorzystac cos ze sztucznej inteligencji ?
Lepiej użyc własnej inteligencji...
Algorytmów spellcheckingu i autokorekty jest cała masa. Większość opiera się na:
- http://pl.wikipedia.org/wiki/Odległość_Levenshteina
- sporym korpusie na którym można policzyć rozkład prawdopodobieństwa występowania pewnych słów w danym języku
po łatwiźnie można skorzystać np. z gotowego słownika np. aspell udostępnia jakieś API dla C a prymitywnie:
aspell dump master pl --encoding=utf-8 | aspell -l pl expand --encoding=utf-8 | tr ' ' '\n' > /tmp/mojslownik
a potem sprawdzać czy wyraz istnieje w bazie. wygenerowałam u siebie i taki słownik waży 50MB i po 1 użyciu działało już dosyć szybko (jądro scacheowało plik, nie wczytywałam do pamięci). do tego może np. w google jest dużo algorytmów na jakieś "string similarity" żeby poprawiać literówki.
Po pierwsze musisz posiadać słownik z listą słów w języku, który chcesz sprawdzać.
Taki słownik musisz wczytać do pamięci ale tak by nie zajmował dużo miejsca - możesz tego dokonać poprzez użycie Uniwersalnej Struktury Słownikowej( ang. Trie ):
http://postimg.org/image/kjbwkanzl/
ok, dzięki za odpowiedź. Ściągnąłem słownik i zastanawia mnie co oznaczają te litery przy wyrazach ? Np. :
BEeGHJjpodpiły/bXxYpodpinać/dEHIikvpodpinaj±cpodpinka
Najłatwiejsza implementacja wygląda tak:
http://cs.lmu.edu/~ray/notes/tries/
Po wczytaniu słownika do takiego drzewa masz cały słownik skompresowany( wiele wyrazów zawiera w sobie podciągi innych wyrazów ),
Czas sprawdzenia czy dane słowo jest w słowniku jest proporcjonalny do długości sprawdzanego słowa.
Przykładowe implementacje(Robert Sedgewick):
a) http://algs4.cs.princeton.edu/52trie/TrieST.java.html,
b) http://algs4.cs.princeton.edu/52trie/TST.java.html - ta wersja jest wydajniejsza.
A ja polecam poczytać to:
http://norvig.com/spell-correct.html ;)