Potrzebuję kodu rozwiązania dla określonego wymagania, i chciałem wiedzieć, czy ktoś jest obeznany z gotową biblioteką, która może go osiągnąć, lub może skierować mnie na najlepsza praktyka. Opis:Algorytm porównywania słów (nie w porządku alfabetycznym)
Użytkownik wprowadza słowo, które ma być jedną z kilku ustalonych opcji (trzymam opcje na liście). Wiem, że dane wejściowe muszą należeć do elementu na liście, ale ponieważ jest to dane wprowadzane przez użytkownika, on/ona mógł popełnić błąd. Szukam algorytmu, który powie mi, jakie jest najbardziej prawdopodobne słowo, które użytkownik chciał powiedzieć. Nie mam żadnego kontekstu i nie mogę zmusić użytkownika do wyboru z listy (tj. Musi on być w stanie wprowadzić słowo swobodnie i ręcznie).
Załóżmy, że lista zawiera słowa „woda”, „Kwartał”, „piwo”, „buraki”, „piekło”, „Hello” i „Mrówkojad”.
Roztwór należy uwzględnić różne typy „normalnych” błędów:
- prędkości typos (np podwojenie znaków spada znaki itp)
- klawiatury typos sąsiedniokanałową znaków (na przykład „qater” do „woda „)
- Non-native angielski literówki (np "quater" za«kwartał»)
- i tak dalej ...
Oczywistym rozwiązaniem jest porównanie listu po literze i podanie "ciężaru karnego" dla każdej innej litery, dodatkowej litery i brakującej litery. Ale to rozwiązanie ignoruje tysiące "standardowych" błędów, które na pewno są gdzieś wymienione. Jestem pewien, że istnieją heurystyki, które zajmują się wszystkimi przypadkami, zarówno specyficznymi, jak i ogólnymi, prawdopodobnie przy użyciu dużej bazy standardowych niedopasowań (jestem otwarty na rozwiązania obciążające dane).
Koduję w języku Python, ale uważam, że to pytanie nie jest agnostyczne.
Wszelkie zalecenia/przemyślenia?