我计划实现双元语法模型来预测搜索文本。如果用户经常搜索"测试搜索词",然后如果用户键入"测试",我希望自动建议"测试搜索词">
我有搜索文本的数据列表。我正在尝试使用双元语法,因为即使用户输入"Tast",它仍然应该提供"测试搜索词"。我正在用Java实现它。我正在寻找一个库来提供我拥有的数据,当我传递用户键入文本时,它应该提供预测。
经过研究,我发现了以下链接
-
https://www.javatips.net/api/Solbase-Lucene-master/contrib/analyzers/common/src/java/org/apache/lucene/analysis/shingle/ShingleFilter.java
-
https://opennlp.apache.org/docs/1.8.1/apidocs/opennlp-tools/opennlp/tools/ngram/NGramUtils.html
但他们对我的情况没有帮助。是否有适合我目的的 Java 库?
我正在考虑两种解决方案:
第一
- 在 MARISA(使用递归实现的 StorAge 匹配算法(TRID 数据结构(针对关键字搜索和自动完成优化的数据结构(中为每个用户字符串查询编制索引。
- 准备一个Levenshtein距离测量方法来容忍拼写错误。
现在,对于每个新用户查询q
,获取在MARISA TRIE中索引的所有字符串,该字符串将您的查询q
作为前缀(在拼写错误容错之后(。
第二
使用弹性搜索建议器
文档 https://www.elastic.co/guide/en/elasticsearch/reference/7.5/search-suggesters.html#completion-suggester
请注意,建议功能的某些部分仍在开发中。