当前位置: 首页 > 知识库问答 >
问题:

露茜。为文本中的每个单词索引几个标记

郎曾笑
2023-03-14

我使用Lucene3.5和SpanishAnalyzer(它本身使用SpanishStemmer和StandardTokenizer)。
当SpanishAnalyzer用单词(例如)“Claramente”和“Claro”索引文档时,它们都将被索引为“CLAR”。
这种行为对我的需要很有用,今天在查询之前,我使用分析器的TokenStream+IncrementToken()获取搜索词的标记,并根据索引的文档进行搜索。我不是在使用QueryParser,而是在代码中构建lucene查询对象。
但是,我希望能够在不丢失SpanishAnalyzer的形态学功能的情况下搜索准确的单词(在本例中为claro)。
我可以跳过上面的步骤(tokenStream)并直接搜索“claro”,但将无法找到它,因为它被索引为“CLAR”。
我也不想使用两个不同的分析器对字段进行两次索引,因为我需要能够使用短语SpannearQuery包含一个准确的单词和一个常规术语(形态学)。
所以…点…我想修改标记器或Stemmer或Filter(?)因此,在索引时,它将为每个单词索引两个标记,有词根的一个和原始的一个,在本例中是“Claro”和“Clar”,然后当查询时,我可以选择是使用确切的单词还是有词根的标记。
我需要帮助来理解如何(以及在哪里)这样做,我想编辑应该在词根的某个地方完成。

顺便说一句,当使用incrementToken()时,我用一个希伯来语分析器对文本中的每个单词返回几个标记(但我没有源代码)做了完全相同的操作

共有1个答案

邢小云
2023-03-14

您需要一个每个位置包含多个令牌的索引,因为您希望搜索包含有词根令牌和无词根令牌的短语。我将回答5.3版本,但3.5没有很大不同。

看一下Solr中ReversedWildcardFilter的源代码。您将看到每个令牌上的两个步骤:

  1. 用原始令牌存储当前状态。因此,incrementToken()-方法的第一次调用get到stemmed标记,第二次调用get到原始标记(位置相同)
  2. 选择一个“markerchar”作为stemmed令牌的前缀。因此,在搜索时,您可以决定是使用词根标记还是原始标记进行搜索。

对于SpanishAnalyzer来说,这意味着如下:

SpanishAnalyzer的核心是SpanishLightStemFilter。SpanishLightStemFilter只使用!keywordattribute.iskeyword()作为标记。因此,对于索引时间,在SpanishAnalyzer中插入一个KeywordRepeatFilter,并用前缀标记带词根的标记。

 类似资料:
  • 问题内容: 如何使用Java在多个文本文件中查找和替换单词? 这是我一次做的方法… 问题答案: 从Commons IO使用:

  • 当前我的网站加载到这里时生成文本https://www.droolstudios.co.uk/home。我现在正在进行一些更改,希望每个单独的工作都在中生成。 HTML null null 有人有什么想法吗?

  • 问题内容: 我想使用PHP将文本拆分成单个单词。你有什么想法要实现吗? 我的方法: 这是一个好方法吗?您有改进的想法吗? 提前致谢! 问题答案: 使用与任何Unicode标点符号匹配的\ p {P}类和\ s空格类。 这将拆分为一组一个或多个空格字符,但也会吸收周围的所有标点符号。它还在字符串的开头或结尾匹配标点符号。这区分了诸如“不要”和“他说’哎呀!’”之类的情况。

  • 这里的问题是什么?。我正在尝试实现图数据结构,使用邻接列表,通过使用来自util包的集合。这里 包含一些整数的LinkedList数组。LinkedList的每个元素都包含另一个类型为:node的LinkedList。 但在编译过程中,它表示不兼容类型。如何解决这个问题?

  • 问题内容: 我的代码中有一个小问题。我正在尝试反转单词和字符串的字符。例如,“狗跑了”将变成“ ehT神纳尔” 该代码几乎可以正常工作。它只是不添加空格。你会怎么做? 问题答案: 您走在正确的轨道上。主要问题是一个空字符串,而不是一个空格(即使您解决了这个问题,您可能也不想在最后一个单词之后留一个空格)。 这是您可以更简洁地执行此操作的方法:

  • 问题内容: 我正在构建一个JS脚本,该脚本有时可以在给定页面上允许用户单击任何单词并将该单词存储在变量中。 我有一个非常丑陋的解决方案,涉及到使用jQuery进行类解析:首先解析整个html,拆分每个空间中的所有内容,然后重新附加包装在中的所有内容,然后添加带有jQ的事件以检测点击这样的类,并使用$(this).innerHTML获得点击的单词。 这在许多方面都是缓慢而丑陋的,我希望有人知道实现这