Java 如何将使用OpenNLP的以下标记化文本与数据库列值进行比较?

Java 如何将使用OpenNLP的以下标记化文本与数据库列值进行比较?,java,mysql,hibernate,lucene,opennlp,Java,Mysql,Hibernate,Lucene,Opennlp,在我的JavaWeb应用程序(Jsp+Servlet+hibernate)中,用户可以请求书籍。请求以文本形式发送到数据库。之后,我使用ApacheOpenNLP标记文本。然后,我需要将这些标记化文本与books表(books表有图书ID、图书名称、作者、描述)进行比较,并向用户提供最相关的建议。我主要需要将其与图书名称列和图书描述列进行比较。这可能吗 import opennlp.tools.tokenize.SimpleTokenizer; public class SimpleTok

在我的JavaWeb应用程序(Jsp+Servlet+hibernate)中,用户可以请求书籍。请求以文本形式发送到数据库。之后,我使用ApacheOpenNLP标记文本。然后,我需要将这些标记化文本与books表(books表有图书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);  
        }       
    }  
}

ApacheOpenNLP可以进行自然语言处理,但您描述的任务是信息检索。看一看

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

SELECT DISTINCT FROM mytable WHERE token IN description;
并以更高的匹配度对行进行排序

OpenNLP如何帮助您?

您可以使用。在这种情况下,您可以在将其添加到数据库的列之前获取图书描述和标题的词干。您还需要阻止查询。这将帮助您进行屈折变化:“car”将与“cars”、“car”匹配


您可以使用实现同样的功能,但您需要一个经过培训的模型,该模型目前还不适用于该模块。

只需添加@wcolen所说的内容,Lucene中还存在一些适用于各种语言的现成词干分析器


OpenNLP可以帮助的另一件事是通过识别书籍作者的姓名(例如Stephen King),以便您可以调整查询,以便您的代码为此类实体创建短语查询,而不是基于普通关键字的查询(结果是,您将不会得到包含Stephen或King的结果,而只得到包含Stephen King的结果).

您是否正在尝试构建一个推荐引擎来回答“如果您喜欢这本书,那么我们推荐这些书”的问题?