문제

Lucene을 사용하여 검색 할 수있는 사이트가 있습니다. 로그에서 사용자는 단일 용어로 들어가기 때문에 사용자가 가끔 원하는 것을 찾지 못하지만 해당 용어의 복수 버전 만 사이트에서 사용됩니다. 검색에서 다른 형태의 단어의 용도도 찾기를 원합니다. 이것은 내가 여러 번 해결되었다고 확신하는 문제이므로 이것에 대한 모범 사례는 무엇입니까?

참고 :이 사이트에는 영어 콘텐츠 만 있습니다.

내가 생각한 몇 가지 접근법 :

  1. 주어진 단어의 대체 형태를 결정하려면 어떤 종류의 동의어 사전 파일로 단어를 찾아보십시오.
    • 몇 가지 예 :
      • "자동차"를 검색하고 쿼리에 "자동차"도 추가합니다.
      • "carry"를 검색하고 쿼리에 "carries"및 "cushed"를 추가합니다.
      • "작은"을 검색하고 쿼리에 "작은"및 "가장 작은"을 추가합니다.
      • "can", 또한 "can can", "can can", "cans"및 "canned"를 쿼리에 추가합니다.
      • 그리고 그것은 역으로 작동해야합니다 (즉, "carries"에 대한 검색은 "캐리"와 "운반 된").
    • 단점 :
      • 사전/시소러스가 자주 업데이트되지 않는 한 많은 새로운 기술 단어에 대해 작동하지 않습니다.
      • 시소러스 파일을 검색하는 성능에 대해 잘 모르겠습니다.
  2. 일부 휴리스틱을 기반으로 대체 형태의 알고리즘을 생성하십시오.
    • 몇 가지 예 :
      • 단어가 "s"또는 "es"또는 "ed"또는 "er"또는 "est"로 끝나면 접미사를 떨어 뜨립니다.
      • 단어가 "IES"또는 "IED"또는 "IER"또는 "IEST"로 끝나면 "y"로 변환합니다.
      • 단어가 "y"로 끝나면 "IES", "IED", "IER"및 "IEST"로 변환합니다.
      • 단어에 "s", "es", "er"및 "est"를 추가하십시오.
    • 단점 :
      • 대부분의 입력에 대해 많은 비 단어를 생성합니다.
      • 해킹처럼 느껴집니다.
      • thedailywtf.com에서 찾을 수있는 것 같습니다. :)
  3. 훨씬 더 정교한 것이 있습니까?

나는 처음 두 가지 접근 방식의 일종의 조합을하고 싶지만 동의어 사전 파일을 어디에서 찾을 수 있는지 잘 모르겠습니다 (또는 "시소러스"가 옳지 않지만 "사전"도 아닙니다. ).

도움이 되었습니까?

해결책

고려하십시오 PorterStemFilter 분석 파이프 라인에서. 인덱스를 구축 할 때 사용되는 쿼리에 대해 동일한 분석을 수행하십시오.

나는 또한 사용했다 랭커스터 스템 밍 결과가 좋은 알고리즘. 사용 PorterStemFilter 가이드로서 Lucene과 쉽게 통합 할 수 있습니다.

다른 팁

단어 줄기는 영어에 적합하지만 단어 줄기가 거의 불가능한 언어 (광산과 같은) 옵션 #1은 실행 가능합니다. 나는 매우 잘 작동하는 것처럼 보이는 Lucene에 대한 내 언어 (아이슬란드)에 대한 적어도 하나의 구현을 알고 있습니다.

그 중 일부는 꽤 깔끔한 아이디어처럼 보입니다. 개인적으로, 나는 쿼리 (쿼리 변환)에 약간의 태그를 추가하여 퍼지로 만들거나 내장을 사용할 수 있습니다. 퍼지 쿠리, Levenshtein 편집 거리를 사용하여 오해에 도움이됩니다.

퍼지 검색 사용 '쿼리 태그', Levenshtein도 사용됩니다. '자동차'검색을 고려하십시오. 쿼리를 '자동차 ~'로 변경하면 '자동차'와 '자동차'등이 있습니다. 필요한 거의 모든 것을 처리 해야하는 쿼리로의 다른 변환이 있습니다.

전문 분야에서 작업하는 경우 (원예 로이 작업을 수행했는지) 또는 일반적인 스템 밍 메소드와 잘 작동하지 않는 언어로 쿼리 로깅을 사용하여 수동 스템 밍 테이블을 만들 수 있습니다.

당신이 생각할 수있는 모든 불일치에 대해 단어 -> 줄기 매핑 만 만들기 만하면, 인덱싱 또는 검색에서 테이블에서 발생하는 단어를 적절한 줄기로 교체 할 때. 쿼리 캐싱 덕분에 이것은 매우 저렴한 솔루션입니다.

Stemming 은이 문제를 해결하는 매우 표준적인 방법입니다. Porter Stemmer는 표준 키워드 검색을 위해 공격적인 방법이라는 것을 알았습니다. 그것은 다른 의미를 가진 단어를 함께 혼동하게됩니다. Kstemmer 알고리즘을 사용해보십시오.

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