gpt4 book ai didi

Solr/Lucene 查询与上下文的词形还原

转载 作者:行者123 更新时间:2023-12-02 05:18:48 26 4
gpt4 key购买 nike

我已经成功地为 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 查询解析器的解决方案,例如 dismaxedismax

我知道像"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?

当然,最好只分析组合在一起的术语。例如,在索引时,词形还原器检测输入文本中的句子,并且仅一起分析单个句子中的单词。但如何在查询时实现类似的事情呢?实现我自己的查询解析器是唯一的选择吗?我很喜欢pf2pf3 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com