Podejściem do generowania sugestii, które z powodzeniem stosowałem, ale nigdzie nie widziałem opisanego, polega na wstępnym obliczaniu sugestii (podczas budowania słownika) przy użyciu „złych” funkcji skrótu.
Chodzi o to, aby przyjrzeć się typom błędów pisowni, które ludzie popełniają, i zaprojektować funkcje skrótu, które przypisałyby niepoprawną pisownię do tego samego zasobnika, co poprawna pisownia.
Na przykład, częstym błędem jest użycie niewłaściwego samogłoskę, jak zdecydowanym zamiast definitywna . Więc projektujesz funkcję skrótu, która traktuje wszystkie samogłoski jako tę samą literę. Łatwym sposobem na to jest najpierw „znormalizowanie” słowa wejściowego, a następnie umieszczenie znormalizowanego wyniku za pomocą zwykłej funkcji skrótu. W tym przykładzie funkcja normalizująca może porzucić wszystkie samogłoski, więc stanie definite
się dfnt
. Słowo „znormalizowane” jest następnie hashowane za pomocą typowej funkcji skrótu.
Wstaw wszystkie słowa ze słownika do pomocniczego indeksu (tablicy skrótów) za pomocą tej specjalnej funkcji skrótu. Zasobniki w tej tabeli będą miały długie listy kolizji, ponieważ funkcja skrótu jest „zła”, ale te listy kolizji są zasadniczo wstępnie obliczonymi sugestiami.
Teraz, gdy znajdziesz błędnie napisane słowo, przeszukujesz listy kolizji dla zasobnika, do którego odwzorowuje błąd pisowni w indeksach pomocniczych. Ta da: Masz listę sugestii! Wszystko, co musisz zrobić, to uszeregować zawarte w nim słowa.
W praktyce będziesz potrzebować kilku pomocniczych indeksów z innymi funkcjami skrótu do obsługi innych typów błędów, takich jak transponowane litery, pojedyncza / podwójna litera, a nawet uproszczony, podobny do Soundexa, aby wychwycić błędy ortograficzne. W praktyce znalazłem uproszczone wymowy, które przeszły długą drogę i zasadniczo przestarzały niektóre z tych, które miały na celu znalezienie trywialnych literówek.
Więc teraz wyszukujesz błędy ortograficzne w każdym z indeksów pomocniczych i łączysz listy kolizji przed rankingiem.
Pamiętaj, że listy kolizji zawierają tylko słowa, które są w słowniku. Dzięki podejściom, które próbują generować alternatywną pisownię (jak w artykule Petera Norviga), możesz uzyskać (dziesiątki) tysięcy kandydatów, których najpierw musisz przefiltrować w słowniku. Dzięki wstępnie obliczonemu podejściu otrzymujesz może kilkaset kandydatów i wiesz, że wszystkie są poprawnie napisane, więc możesz przejść od razu do rankingu.
Aktualizacja : Od tego czasu znalazłem jeden opis algorytmu, który jest podobny do tego, Wyszukiwanie rozproszone FAROO . Wciąż jest to wyszukiwanie ograniczone do edycji, ale jest bardzo szybkie, ponieważ etap obliczeń wstępnych działa jak mój pomysł na „złe funkcje skrótu”. FAROO używa tylko ograniczonej koncepcji złej funkcji skrótu.