- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经成功地为 Lucene 实现了捷克语词形还原器。我正在使用 Solr 对其进行测试,它在索引时间运行得很好。但当用于查询时,它的效果不太好,因为查询解析器不向词形还原器提供任何上下文(之前或之后的单词)。
例如短语 pila vodu
在索引时和查询时的分析方式不同。它使用了不明确的词 pila
,这可能意味着 pila
(锯,例如电锯)或 pít
(动词“喝”的过去式)。
pila vodu
->
pít voda
pila voda
..所以这个词pila
未在文档片段中找到且未突出显示。
此行为记录在 solr wiki (下面引用)我可以通过调试我的代码来确认它(只有孤立的字符串“pila”和“vodu”被传递到词形还原器)。
... The Lucene QueryParser tokenizes on white space before giving any text to the Analyzer, so if a person searches for the words
sea biscit
the analyzer will be given the words "sea" and "biscit" seperately, ...
是否可以以某种方式更改、配置或调整查询解析器,以便词形还原器可以看到整个查询字符串,或者至少是单个单词的一些上下文?我也希望有一个针对不同 solr 查询解析器的解决方案,例如 dismax 或 edismax。
我知道像"pila vodu"
这样的短语查询不存在这样的问题。 (引号),但随后我会丢失没有确切短语的文档(例如带有“pila víno”或什至“pila dobrou vodu”的文档)。
编辑 - 尝试解释/回答以下问题(谢谢@femtoRgon):
If the two terms aren't a phrase, and so don't necessarily come together, then why would they be analyzed in context to one another?
当然,最好只分析组合在一起的术语。例如,在索引时,词形还原器检测输入文本中的句子,并且仅一起分析单个句子中的单词。但如何在查询时实现类似的事情呢?实现我自己的查询解析器是唯一的选择吗?我很喜欢pf2
和pf3
edismax
的选项解析器,如果我自己的解析器,我是否必须再次实现它们?
背后的想法实际上更深入一些,因为 the lemmatizer即使对于具有相同词汇基础的单词也会进行词义消歧。例如单词bow
在英语中大约有 7 种不同的含义(参见 wikipedia ),词形还原器正在区分这些含义。因此,我想利用这种潜力使搜索更加精确——仅返回包含单词 bow
的文档。在查询所需的具体意义上。所以我的问题可以扩展到:如何获得正确的<lemma;sense>
- 查询词配对?如果单词出现在其共同上下文中,则词形还原器通常能够分配正确的含义,但当没有上下文时,它就没有机会。
最佳答案
最后,我实现了自己的查询解析器。
由于有 edismax
源作为指南和引用实现,这并不困难。我可以轻松地将我的解析器结果与 edismax 的结果进行比较...
解决方案:
首先,我一起分析整个查询字符串。这给了我“ token ”列表。
与停用词有一点冲突 - 获取停用词的标记并不容易,因为分析器会忽略它们,但您可以从 PositionIncrementAttribute
中检测到它们。
从“tokens”中,我以与 edismax 相同的方式构建查询(例如,创建在 DisjunctionMaxQuery
中组合的所有 2-token 和/或 3-token 短语查询实例)。
关于Solr/Lucene 查询与上下文的词形还原,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849662/
我是一名优秀的程序员,十分优秀!