[英]Sentence Auto-Complete with Java
假设我有大约 1000 个句子要在用户输入字段时作为建议提供。
我正在考虑lucene in memory search
,然后将结果输入到suggestions set
。
运行搜索的trigger
是space char
并exit from the input field
。
我打算将它与GWT
一起使用,这样客户端就可以从服务器获取结果。
我不想做谷歌正在做的事情; 他们在其中完成每个单词,然后对每组关键字提出建议。 我只想检查关键字并据此提出建议。 有点像当我在stackoverflow上输入问题的标题时。
我正在研究类似的解决方案。 这篇题为Effective Phrase Prediction的论文对我很有帮助。 您还必须优先考虑建议
如果你只有 1000 个句子,你可能不需要像 lucene 这样强大的索引器。 我不确定您是要执行“完成句子”建议还是“建议具有相同关键字的其他查询”建议。 以下是两者的解决方案:
假设您要完成用户输入的句子,那么您可以将所有字符串放入SortedSet
中,并使用tailSet
方法获取比输入字符串“更大”的字符串列表(因为字符串比较器认为以字符串B
开头的较长字符串A
比B
大)。 然后,遍历tailSet
返回的集合的前几个条目以创建一组字符串,其中第一个inputString.length()
字符与输入字符串匹配。 只要第一个inputString.length()
字符与输入字符串不匹配,您就可以停止迭代。
如果你想做关键词建议而不是“完成句子”建议,那么开销取决于你的句子有多长,以及句子中有多少独特的词。 如果这个集合足够小,您将能够使用HashMap<String,Set<String>>
,在其中将关键字映射到包含它们的句子。 然后,您可以通过与集合相交来处理多字查询。
在这两种情况下,我可能首先将所有字符串转换为小写(假设这在您的应用程序中是合适的)。 我认为这两种解决方案都不会扩展到数十万条建议。 其中任何一个都做你想做的事吗? 如果您愿意,很乐意提供代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.