3

假设我有大约 1000 个句子要在用户输入字段时作为建议提供。

我正在考虑运行lucene in memory search,然后将结果输入suggestions set.

用于运行搜索的trigger将是space charand exit from the input field

我打算使用它,GWT因此客户端只需从服务器获取结果。

我不想做谷歌正在做的事情;他们在其中完成每个单词,然后对每组关键字提出建议。我只想检查关键字并据此提出建议。有点像当我在stackoverflow上输入问题的标题时。

以前有没有人做过这样的事情?是否已经有我可以使用的库?

4

2 回答 2

2

我正在研究类似的解决方案。这篇题为Effective Phrase Prediction的论文对我很有帮助。您还必须优先考虑建议

于 2011-10-15T16:05:50.537 回答
1

如果你只有 1000 个句子,你可能不需要像 lucene 这样强大的索引器。我不确定您是要执行“完成句子”建议还是“建议具有相同关键字的其他查询”建议。以下是两者的解决方案:

假设您要完成用户输入的句子,那么您可以将所有字符串放入 aSortedSet中,并使用该tailSet方法获取比输入字符串“更大”的字符串列表(因为字符串比较器认为 a以字符串A开头的较长字符串B要“大于” B)。然后,遍历返回的集合的前几个条目tailSet以创建一组字符串,其中第一个inputString.length()字符与输入字符串匹配。只要第一个inputString.length()字符与输入字符串不匹配,您就可以停止迭代。

如果你想做关键词建议而不是“完成句子”建议,那么开销取决于你的句子有多长,以及句子中有多少独特的词。如果这个集合足够小,您将能够摆脱 ,您将HashMap<String,Set<String>>关键字映射到包含它们的句子。然后,您可以通过与集合相交来处理多字查询。

在这两种情况下,我可能首先将所有字符串转换为小写(假设这在您的应用程序中是合适的)。我认为这两种解决方案都不会扩展到数十万条建议。其中任何一个都做你想做的事吗?如果您愿意,很乐意提供代码。

于 2011-06-10T05:13:14.550 回答