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)
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完成相同的操作,但是您需要一个训练有素的模型,该模型目前不适用于该模块.