2015-02-03 2 views
6

나는 Java 기반 응용 프로그램과 MySQL 데이터베이스에 키워드 집합을 가지고 있습니다 (약 3M 키워드에 대해 각각 하나 이상의 단어가 포함될 수 있습니다. 예 : "메모리", " 오래된 집 ","유럽 연합법 "등).Java에서 다중 키워드 검색

사용자는 임의의 텍스트 (대부분 몇 페이지)로 문서를 업로드하여 응용 프로그램과 상호 작용합니다. 내가 원했던 것은 문서에서 300 만 개의 키워드가 나타나는 위치와 위치를 검색하는 것입니다.

나는 루프를 사용하고 각 키워드에 대해 문서를 검색해 보았지만 이는 효율적이지 않습니다. 더 효율적인 방법으로 검색을 수행 할 라이브러리가 있는지 궁금합니다.

대단히 감사하겠습니다.

+0

키워드 옆의 열에 각 키워드에 대한 저장 해시가 있고, 각 단어를 검사하는 문서를 읽는 중에는 'keyword_hash = calculateHash (wordToCheck)'라는 키워드에서 키워드를 선택하십시오. – rzysia

+0

고려해야 할 사항은 최단 경로가 무엇인가하는 것입니다. 300 만 건의 검색을 수행하거나 업로드 된 문서에서 N 개의 구를 작성합니다. 해결책은 모든 3M 키워드를 검색하여 문서를 검색하는 것입니다. Lucenes Keyword Highlighter를 사용하고 강조 표시된 모든 단어를 3M 키워드와 일치 시키십시오;) –

+0

하이 라이터의 동일한 추출 된 텍스트 부분에서 다중 키워드 결과를 얻는 방법이 있습니까? 또는 파일 내에있는 일치하는 키워드의 목록을 반환 할 수있는 구조가 있습니까? –

답변

1

블룸 필터 http://en.wikipedia.org/wiki/Bloom_filter을 사용해보세요. 그런 다음 블룸 필터에 대해 각 단어를 확인하여 긍정적 인 결과를 찾습니다. 가양 성이있을 수 있음을 기억하십시오. 따라서 블룸 필터의 긍정적 인면이 있다면 '업로드 된 문서에 어떤 키워드가 있는지를 구체적으로 식별 할 수있는'keywordtable에서 keyword를 선택 (bloom filter의 긍정적 인 키워드) '과 같은 sql 쿼리를 시도해 볼 수 있습니다.

자바 구현 블룸 필터 구아바 라이브러리에서 사용할 수 있습니다.

5

프로젝트 Apache Lucene이 도움이 될 수 있습니다.

Apache LuceneTM은 전적으로 Java로 작성된 고성능의 완전한 텍스트 검색 엔진 라이브러리입니다. 전체 텍스트 검색이 필요한 거의 모든 응용 프로그램, 특히 교차 플랫폼에 적합한 기술입니다.

당신은 당신은 sourceforge로도 사용할 수 The Lemur Project을 사용할 수 있습니다 here

1

몇 가지 유용한 자습서를 찾을 수 있습니다

여우 원숭이 프로젝트는 검색 엔진, 브라우저 툴바, 텍스트 분석 도구 및 데이터 자원을 개발하는 Indri 검색 엔진 및 ClueWeb09 데이터 세트를 포함한 정보 검색 및 텍스트 마이닝 소프트웨어의 연구 및 개발을 지원합니다.

그리고 Taher가 추천 한대로 Apache Lucene은 멋진 도구이며 두 가지를 모두 사용해 본 결과 멋졌습니다.