Mam duży zbiór nazwisk osób (np. "John Smith"). Chcę wyszukać ludzi po nazwisku. Jednak niektóre zapytania będą błędnie napisane (np. "Jon smth", "johnsm i"). Czy są jakieś biblioteki korekcji pisowni z powiązaniami w Pythonie, które mogą znaleźć dla mnie korekty pisowni?Korekta pisowni dla nazw osób (Python)
Jestem świadomy: Whoosh i Python-aspell. Poprawiona pisownia Whoosha nie działa dla mnie, ponieważ zapisuje kolekcję poprawnych pisowni na dysku, zamiast zapisywać ją w pamięci. To sprawia, że wyszukiwania są zbyt wolne dla mojej aplikacji. Zmiana tego zachowania nie wydaje się trywialna, ze względu na strukturę kodu. Również Whoosh nie waży różnej postaci - redaguje inaczej, chociaż, powiedzmy, "y" jest znacznie bardziej prawdopodobne, aby zostać pomylonym z "ja" ("jim kazinsky" -> "jim kazinski") niż jest to "z" .
Aspell nie działa dobrze w przypadku nazwisk osób, ponieważ imiona zazwyczaj zawierają białe znaki - Aspell uznaje to słowo za podstawową jednostkę korekty. Ponadto, jak rozumiem, Aspell używa n-gramowego modelu korekcji pisowni, a nie modelu odległościowego edycji znaku. Chociaż model n-gramowy ma sens dla słów słownikowych, to nie działa tak dobrze dla nazw: ludzie "bob ruzatoxg" i "joe ruzatoxg" mają wiele rzadkich trygramów wspólnych, ponieważ mają to samo rzadkie nazwisko . Ale są to wyraźnie różni ludzie.
Należy również wspomnieć, że nie mogę po prostu porównać każdego zapytania z wszystkimi wpisami w kolekcji - byłoby to zbyt wolne. Niektóre indeksy muszą zostać wcześniej zbudowane.
Dzięki!
Biblioteka metafonów wygląda użytecznie, dzięki za to. Jeśli skończę pisać swoje własne sprawdzanie pisowni nazwisk (i wciąż mam nadzieję, że ktoś już napisał, że mogę go użyć ...), prawdopodobnie użyję dopasowania metafonowego części danych. – Jeff
Biblioteka Levenshtein wygląda raczej na dopasowanie parami między dwoma ciągami. Nie sądzę, że mogę tego użyć, ponieważ wtedy będę musiał porównać każde zapytanie z każdym ciągiem nazw w mojej kolekcji. Jednak w bibliotece Metaphone powinienem umieć zbudować słownik fonetycznych reprezentacji nazw w mojej kolekcji przed przetwarzaniem zapytań. – Jeff
[fuzzywuzzy] (http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python) może być opcją. – Matthias