gpt4 book ai didi

java - Lucene (Java) 中的过滤术语计数

转载 作者:行者123 更新时间:2023-12-02 07:57:38 26 4
gpt4 key购买 nike

我目前正在尝试使用 Lucene 获取描述字段中每个单词的出现次数。F.e.

  • 描述:一盒苹果
  • 描述:一盒香蕉

输出:

  • 方框2
  • 2个
  • 苹果1
  • 香蕉1

我正在寻找单词和频率。

问题是我想将这些结果过滤到给定文档,我的意思是只计算给定文档的描述字段中的单词。

感谢您提供的任何帮助。

//回复评论:我有这样的东西:

public ArrayList<ObjectA> GetIndexTerms(String code) {
try {

ArrayList<Object> termlist = new ArrayList<ObjectA>();
indexR = IndexReader.open(path);
TermEnum terms = indexR.terms();

while (terms.next()) {
Term term = terms.term();
String termText = term.text();
int frequency = indexR.docFreq(term);
ObjectA newObj = new ObjectA(termText, frequency);
termlist.add(newObj);
}
}
return termlist;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}

但我不知道如何按文档过滤它...

<小时/>

//今天!

使用 termfreqvec 我可以让它工作,但它需要 de doc id 并且我无法正确使用它。因为我使用了一个从 0 开始的查询 de“i”值,所以这不是正确的文档 ID。有什么想法可以让它正常工作吗? 谢谢!

    TopDocs tp = indexS.search(query, Integer.MAX_VALUE);
for (int i = 0; i < tp.scoreDocs.length; i++){
ScoreDoc sds = tp.scoreDocs[i];
Document doc = indexS.doc(sds.doc);
TermFreqVector tfv = indexR.getTermFreqVector(i,"description");

for (int j = 0; j < tfv.getTerms().length; j++) {
String item = tfv.getTerms()[j];
termlist.add(new TerminoDescripcion(item.toUpperCase(), tfv.getTermFrequencies()[j]));
}
}

最佳答案

问题在于 Lucene 是一个倒排索引,这意味着它可以轻松地根据术语检索文档,而您正在寻找相反的内容,即根据文档检索术语。

希望这是一个经常出现的问题,Lucene 使您能够检索文档的术语(术语 vector ),前提是您在索引时启用了此功能。

参见TermVector.YESField constructor了解如何在索引时启用它们和 IndexReader了解如何在搜索时检索术语 vector 。

或者,您可以动态重新分析存储的字段,但这可能会更慢,尤其是在大型字段上。

关于java - Lucene (Java) 中的过滤术语计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9395081/

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