2017-05-23 2 views
1

私のJava Webアプリケーション(Jsp + Servlet + hibernate)では、ユーザーは書籍をリクエストできます。要求はテキストとしてデータベースに送られます。その後、Apache Open NLPを使ってテキストをトークン化します。次に、これらのトークン化されたテキストをbooksテーブルと比較する必要があります(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)を認識することで、プレーンキーワードベースのクエリではなくエンティティのフレーズクエリを作成できるようにクエリを調整できるようにすることです。スティーブン・キングを含む結果を得ることはできませんが、結果はスティーブン・キングのみを含む結果になります)。

関連する問題