Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以按词性在Lucene索引中搜索单词吗_Java_Solr_Lucene_Nlp_Tokenize - Fatal编程技术网

Java 可以按词性在Lucene索引中搜索单词吗

Java 可以按词性在Lucene索引中搜索单词吗,java,solr,lucene,nlp,tokenize,Java,Solr,Lucene,Nlp,Tokenize,我在Lucene索引中存储了大量文档,我使用的是customAnalyzer,它基本上对文档内容进行标记化和词干分析 现在,如果我在文档中搜索“love”一词,我会得到love被用作名词或动词的结果,而我只想要那些仅将love用作动词的文档 如果我还可以将单词的词性与单词一起提及,那么如何实现这样的功能,从而使结果仅将love用作动词而不是名词 我可以想出一种方法,首先在文档的每个单词后面加上词性标记,然后在词性标记后面加上“u”或其他什么,然后进行相应的搜索,但我想知道在Lucene中是否有更

我在Lucene索引中存储了大量文档,我使用的是customAnalyzer,它基本上对文档内容进行标记化和词干分析

现在,如果我在文档中搜索“love”一词,我会得到love被用作名词或动词的结果,而我只想要那些仅将love用作动词的文档

如果我还可以将单词的词性与单词一起提及,那么如何实现这样的功能,从而使结果仅将love用作动词而不是名词


我可以想出一种方法,首先在文档的每个单词后面加上词性标记,然后在词性标记后面加上“u”或其他什么,然后进行相应的搜索,但我想知道在Lucene中是否有更聪明的方法来实现这一点。

我可以想出以下方法

方法1

正如您提到的:在索引时识别词性标记并将其附加到实际术语。在查询时执行同样的操作

我想讨论一下相关的缺点

缺点:

1) 未来的需求可能要求您获得结果,而不考虑词性。包含已修改术语的索引将不起作用

2) 您可能希望执行一个布尔查询,如“术语:名词或形容词”。您必须自己编写查询扩展器

方法2

尝试使用Lucene的有效负载功能

这里是一个简短的例子

解决您的用例的步骤

1) 以有效负载的形式存储词性标记

2) 为每个词性标记创建自定义相似性类

3) 根据查询,将相应的CustomSimilarity分配给IndexSearcher。例如,为名词查询指定名词

4) 根据有效负载提高或“降低”文档的分数。上述教程中给出的示例

5) 编写一个自定义收集器以过滤出分数不符合上述分数提升逻辑的文档

这种方法的优点是索引与任何其他正常搜索保持兼容

缺点:

1) 维护开销:必须为每个相似性维护多个IndexSearcher。 2) 代码解决方案有点复杂


坦率地说,我对自己的解决方案并不满意,只是想让你知道还有另一种方法。这完全取决于您的场景,该项目是一次性学术项目还是商业项目等。

您是否有有限的上述要求?比如名词、动词等。是的,我想主要限制在名词、普通名词和动词上。