如何改善Sphinx中的句子检测?

8

使用 Sphinx 可以在一句话中搜索单词。例如,我们有以下文本:

Вася молодец, съел огурец, т.к. проголодался. Такие дела。

如果我搜索

молодец SENTENCE огурец

我发现了这段文本。如果我搜索
молодец SENTENCE проголодался

由于短语т.к.的句点被视为句子结尾,因此我找不到这个文本。

而且我看到,在Sphinx源代码中,定界符的设置是硬编码的。

我的问题是如何改进句子的检测?更好的方法是使用Yandex的Tomita解析器或其他具有智能句子检测功能的nlp库。


是的,它是硬编码的,但是“.”周围的规则应该被设置为不将T.K.视为句子边界,因为它是一个缩写词。http://sphinxsearch.com/docs/current.html#conf-index-sp - barryhunter
@barryhunter,是的,但是т.к.不是Sphinx的标准缩写吗?如何指定这个缩写?有其他情况的任何可能方式:“Компании Yahoo! известна во всем мире.”和其他情况。我认为更好的方法是将分词委托给外部库... - Nick
根据规则,这个词应该被视为缩写词(就我所知),它是基于规则而不是特定的缩写词。如果要扩展 sphinx 来使用更广泛的规则,则需要修改源代码。 - barryhunter
@barryhunter,我看到了另一个缩写问题:「Вот и пришла осень в U.S.A. В лесу медведи жуют ягоды.」。Sphinx将这两个句子粘在一起... - Nick
1个回答

1
使用Yandex的Tomita解析器将文本分成句子。我们得到了由"\n"分隔的文本。
删除每个句子中所有的"."、"!"和"?",只保留最后一个。
使用这个预处理数据建立Sphinx索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接