2012-12-03 20 views
10

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!

Odpowiedz

6

Brzmi jak (nie ma gry słów tam przeznaczonych) potrzebna jest pewna forma Metaphone algorithm, która została zaimplementowana w Pythonie i jest dostępna na Pypi: http://pypi.python.org/pypi/Metaphone/0.4.

Istnieje też inne algorytmy, takie jak Levenshtein i Soundex (nie znaleźli jeszcze niezawodnego realizację tego Pythona) - może chcesz obliczyć pewną formę metryki przy użyciu więcej niż jednego z nich (być może nawet dać inną wagę do każdego wyniku), aby wymyślić listę prawdopodobnych poprawek.

+0

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

+0

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

+2

[fuzzywuzzy] (http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python) może być opcją. – Matthias

Powiązane problemy