2012-12-03 7 views
10

나는 많은 사람 이름 모음을 가지고 있습니다 (예 : "john smith"). 나는 그 안에 이름으로 사람을 찾고 싶다. 그러나 일부 검색어의 철자가 잘못되었습니다 (예 : 'jon smth', 'johnsm ith'). 맞춤법 교정 된 일치 항목을 찾을 수있는 파이썬 바인딩이있는 맞춤법 교정 라이브러리가 있습니까?사람 이름의 맞춤법 수정 (Python)

저는 Whoosh와 Python-aspell을 알고 있습니다. Whoosh의 철자 교정은 올바른 철자의 모음을 메모리에 저장하는 것이 아니라 디스크에 기록하기 때문에 나에게 적합하지 않습니다. 그건 내 응용 프로그램에 대한 조회가 너무 느려집니다. 코드가 어떻게 구조화 되었기 때문에이 동작을 변경하는 것은 간단하지 않습니다. 또한 'y'는 'i'("jim kazinsky"-> "jim kazinski")와 혼동 될 가능성이 훨씬 더 높지만 'Who'는 'z'보다 다른 문자 편집을 다른 방식으로 적용하지 않습니다. .

Aspell은 이름에 일반적으로 공백이 포함되어 있기 때문에 사람 이름에 잘 맞지 않습니다. Aspell은 단어를 수정의 기본 단위로 간주합니다. 또한 Aspell은 문자 편집 거리 모델이 아닌 철자 교정의 n-gram 모델을 사용합니다. n-gram 모델은 사전 단어에 대해 의미가 있지만, 이름에 대해서는 잘 작동하지 않습니다. 사람들 "bob ruzatoxg"및 "joe ruzatoxg"는 희귀 한 성을 가지고 있기 때문에 드문 삼부작이 많이 있습니다. . 그러나 그들은 분명히 다른 사람들입니다.

또한 나는 각 쿼리를 컬렉션의 모든 항목과 비교할 수 없다는 것을 언급해야합니다. 너무 느립니다. 일부 색인은 미리 작성해야합니다.

감사합니다.

답변

6

같은 소리 (어떤 말도 의도하지 않음)는 Metaphone algorithm의 형태가 필요합니다. 이는 Python으로 구현되었으며 Pypi : http://pypi.python.org/pypi/Metaphone/0.4에서 사용할 수 있습니다. 및 Soundex과 같은 다른 알고리즘도 있습니다. (신뢰할 수있는 Python 구현을 아직 찾지 못했습니다.) 둘 이상을 사용하는 메트릭을 계산할 수도 있습니다 (다른 가중치를 부여 할 수도 있음). 각 결과에) 가능한 정정의 결과 목록을 제시하십시오.

+0

메타 폰 라이브러리는 유용하게 보입니다. 덕분입니다. 필자가 맞춤법 검사기를 써서 이름을 쓰는다면 (그리고 나는 아직 쓸 수있는 사람이 쓰여졌기를 희망하고있다.) 아마도 메트릭의 일부에 대한 메타 폰 매칭을 사용할 것이다. – Jeff

+0

Levenshtein 라이브러리는 두 문자열 사이의 쌍으로 일치하는 것보다 더 많은 것으로 보입니다. 나는 그것을 사용할 수 있다고 생각하지 않는다. 왜냐하면 각 쿼리를 내 컬렉션의 모든 이름 문자열과 비교해야하기 때문이다. 그러나 Metaphone 라이브러리를 사용하면 쿼리를 처리하기 전에 내 컬렉션에있는 이름의 음성 표현 사전을 작성할 수 있습니다. – Jeff

+2

[fuzzywuzzy] (http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python) 옵션이 될 수 있습니다. – Matthias

관련 문제