Sphinx 能够根据一个句子中出现的单词进行搜索。比如有一段文字:
Vasya 做得很好,他吃了黄瓜,因为 饥饿的。就这样吧。
如果要求
молодец SENTENCE огурец
然后我们会找到这段文字。如果要求
молодец SENTENCE проголодался
然后我们就不会再找到这个文本了,因为显然在 Sphinx 中,分解成句子的实现是以一种简单的方式实现的,这里遇到的第一个点被认为是句子的结尾。因此问题。
在准备索引时,如何配置 Sphinx 使其具有更智能的句子分解?任何选项都可以——在配置中指定一些东西或插入一个外部包以将其分解成句子,例如,来自 Yandex 的 Tomita 解析器。
更新
有一个想法是使用 Tomit 解析器将其提前分解成句子,并告诉 Sphinx 使用换行符作为句子分隔符,但从 Sphinx 源码来看,这不太可能成功。
适合的解决方案。
使用 Tomita 解析器将文本分解成句子。我们得到的文本中的句子由换行符分隔。
在每个收到的句子中,我们删除所有的句号、感叹号和问号,只留下最后一个句号“?” 或者 ”!”。
基于这些处理过的数据,我们在 Sphinx 中建立索引。句子拆分将按预期工作,因为 Sphinx 在找到“.”、“?”时将文本拆分为句子。或者 ”!”。