Java 如何将使用OpenNLP的以下标记化文本与数据库列值进行比较?
在我的JavaWeb应用程序(Jsp+Servlet+hibernate)中,用户可以请求书籍。请求以文本形式发送到数据库。之后,我使用ApacheOpenNLP标记文本。然后,我需要将这些标记化文本与books表(books表有图书ID、图书名称、作者、描述)进行比较,并向用户提供最相关的建议。我主要需要将其与图书名称列和图书描述列进行比较。这可能吗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
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的结果).您是否正在尝试构建一个推荐引擎来回答“如果您喜欢这本书,那么我们推荐这些书”的问题?