如何比较下面使用开放NLP的数据库列值的标记化文本?

use*_*032 2 java mysql lucene hibernate opennlp

在我的java Web应用程序(Jsp + Servlet + hibernate)中,用户可以请求书籍.请求作为文本进入数据库.之后,我使用Apache Open NLP对文本进行标记.然后我需要将这些标记化的文本与书籍表进行比较(书籍表具有书籍ID,书名,作者,描述),并向用户提供大多数相关的建议.大多数情况下,我需要将其与书名列和书籍描述栏进行比较.这可能吗?

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);  
        }       
    }  
}
Run Code Online (Sandbox Code Playgroud)

wco*_*len 5

Apache OpenNLP可以执行自然语言处理,但您描述的任务是信息检索.看看http://lucene.apache.org/solr/.

如果您确实只需要使用DB,则可以尝试使用LIKE sql关键字对每个标记进行查询:

SELECT DISTINCT FROM mytable WHERE token IN description;
Run Code Online (Sandbox Code Playgroud)

并对具有较高匹配的行进行排名.

OpenNLP如何为您提供帮助?

您可以使用OpenNLP Stemmer.在这种情况下,您可以在将其添加到数据库的列之前获取书籍描述和标题的主干.您还需要阻止查询.这将帮助你改变:"汽车"将匹配"汽车","汽车".

您可以使用OpenNLP Lemmatizer完成相同的操作,但是您需要一个训练有素的模型,该模型目前不适用于该模块.