문제

제품 이름의 매우 큰 데이터베이스가 주어지면 사용자 검색에서 가능한 오타를 어떻게 감지하고 가능한 수정을 제안 하시겠습니까 (Google이 제시하는 방식과 같은 경우)?

예를 들어

사용자는 "Fork Handels"를 입력하고 '검색'을 누릅니다.

그들은 돌아옵니다

"결과 없음. '포크 핸들'을 의미 했습니까?"

도움이 되었습니까?

해결책

이 문제에 대한 몇 가지 접근법이 있습니다.

  1. 테이블을 유지합니다 가장 인기있는 철자는 데이터베이스에서. 일반적인 철자가 필요한 경우 : 여기)
  2. 알고리즘을 기반으로합니다 거리를 편집합니다: 정보 이론과 컴퓨터 과학에서 두 문자의 문자열 사이의 편집 거리는 그 중 하나를 다른 문자로 변환하는 데 필요한 작업 수입니다. 이 메트릭을 정의하거나 계산하기위한 여러 가지 알고리즘이 있습니다. 읽기 Levenshtein 알고리즘의 Wikipedia 기사 예를 들어.
  3. 전체 텍스트 검색에 Lucene을 사용하는 경우 여기에 좋은 기사가 있습니다 "당신은"기능을 구현하는 방법을 보여줍니다.
  4. 이 기능을 간단한 주문 수정으로 본다면 여러 언어로 된 멋진 매우 짧은 구현이 있습니다. 철자 수정 사항을 작성하는 방법

다른 팁

당신은 a를 사용할 수 있습니다 음성 알고리즘, 와 같은 Soundex 비슷하게 들리는 성냥을 찾으십시오.

PostgreSQL에는 이름이 지정된 모듈이 있습니다 퍼지 스트 매치, DOCS는 Soundex, Levenshtein, Metaphone 및 Double Metaphone을 사용하는 예를 보여줍니다.

Google은 결과가 없을 때 사용자가 실행하는 내용의 목록을 유지한다고 확신합니다. 이 값의 매핑을 유지할 수 있습니다 (예 : 재 형성 문자열이 동일한 문자로 시작하는 경우).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top