2017-05-23 1 views
1

내 Java 웹 응용 프로그램 (Jsp + Servlet + hibernate)에서 사용자는 책을 요청할 수 있습니다. 요청은 텍스트로 데이터베이스로 이동합니다. 그 후 Apache Open NLP를 사용하여 텍스트를 토큰 화합니다. 그런 다음이 토큰 화 된 텍스트를 books 테이블 (책 테이블은 책 ID, 책 이름, 작성자, 설명 있음)과 비교하여 가장 관련있는 제안을 사용자에게 제공해야합니다. 주로 책 이름 열과 책 설명 열과 비교해야합니다. 이것이 가능한가?데이터베이스 열 값으로 열린 NLP를 사용하여 토큰 화 된 텍스트를 비교하는 방법은 무엇입니까?

import opennlp.tools.tokenize.SimpleTokenizer; 

public class SimpleTokenizerExample { 
    public static void main(String args[]){ 

     String sentence = "Hello Guys , I like to read horror stories. If you have any horror story books please share with us. Also my favorite author is Stephen King"; 

     //Instantiating SimpleTokenizer class 
     SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE; 

     //Tokenizing the given sentence 
     String tokens[] = simpleTokenizer.tokenize(sentence); 

     //Printing the tokens 
     for(String token : tokens) {   
      System.out.println(token); 
     }  
    } 
} 
+0

"이 책을 원한다면이 책들을 추천합니다"라는 질문에 답하는 추천 엔진을 만들려고하십니까? – jbird

답변

4

Apache OpenNLP는 자연어 처리를 할 수 있지만 설명하는 작업은 정보 검색입니다. http://lucene.apache.org/solr/을보세요.

당신이 정말로에만 DB를 사용해야하는 경우, 당신은 LIKE SQL 키워드를 사용하여 각 토큰에 대한 쿼리 만들기 위해 노력하고 있습니다 :

SELECT DISTINCT FROM mytable WHERE token IN description; 

을 높은 경기로 줄을 평가한다.

OpenNLP가 어떻게 도움을 줄 수 있습니까?

OpenNLP Stemmer을 사용할 수 있습니다. 이 경우 데이터베이스의 컬럼에 추가하기 전에 책 설명 및 제목의 줄기를 가져올 수 있습니다. 당신은 또한 쿼리를 줄이기 위해 필요합니다. 이것은 굴절과 함께 당신을 도울 것입니다 : "자동차"는 "자동차", "자동차"와 일치합니다.

OpenNLP Lemmatizer과 동일하게 수행 할 수 있지만 숙련 된 모델이 필요합니다.이 모델은 현재 해당 모듈에서 사용할 수 없습니다.

2

@wcolen이 말한 것에 덧붙이면, 일부 형태의 출하자는 Lucene에서도 다양한 언어로 존재합니다.

OpenNLP가 도움이 될 수있는 또 다른 사항은 NameFinderTool을 통해 책 저자 이름 (예 : Stephen King)을 인식하여 코드가 일반 키워드 기반 쿼리 대신 해당 엔티티에 대한 구문 쿼리를 생성하도록 쿼리를 조정할 수 있도록하는 것입니다. 결과로 스티븐 또는 킹이 포함 된 결과를 얻지는 못하지만 스티븐 킹이 포함 된 결과 만 표시됩니다).

관련 문제