gpt4 book ai didi

java - 如何使用 Lucene5.3 获取每个文档中特定术语的术语频率?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:35 24 4
gpt4 key购买 nike

假设有三个文档。Doc1:大家好,我是小李。你好。Doc2:干得好 child 。Doc3:嗨, child 。我很年轻。

我尝试使用 Lucene5.3 获取每个文档中每个术语的词频。

我想要得到的结果:文件1:嗨 2大家 1我 1上午 1李一

1   IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(iNDEX_DIR2).toPath()));

2 int num_doc = reader.numDocs();
3 for(int docNum=0; docNum<num_doc; docNum++){
4 try{

5 Document doc = reader.document(docNum);
6 System.out.println("Processing file:"+doc.get("filename"));
7
8 Terms termVector = reader.getTermVector(docNum, "contents");
9 TermsEnum itr = termVector.iterator();
10 BytesRef term = null;
11
12 while((term = itr.next()) != null){
13 try{
14 String termText = term.utf8ToString();
15 Term termInstance = new Term("contents",term);
16 long termFreq = reader.totalTermFreq(termInstance);
17 long docCount = reader.docFreq(termInstance);
18
19 System.out.println("term: "+termText+", termFreq = "+termFreq+", docCount = "+docCount);
20 }catch(Exception e){
21 System.out.println(e);
22 }
23 }

我得到特定术语的总术语频率。谁能帮帮我?

谢谢!

最佳答案

使用PostingEnum.freq() .

在您的情况下,您有一个带有 TermVector 的索引,因此请使用以下内容(在第 7 行之后):

8           Terms termVector = reader.getTermVector(docNum, "contents");
9 TermsEnum itr = termVector.iterator();
10 BytesRef term = null;
11 PostingsEnum postings = null;
12 while((term = itr.next()) != null){
13 try{
14 String termText = term.utf8ToString();
15 postings = itr.postings(postings, PostingsEnum.FREQS);
16 int freq = postings.freq();
17
18
19 System.out.println("doc:" + docNum + ", term: " + termText + ", termFreq = " + freq);
20 } catch(Exception e){
21 System.out.println(e);
22 }
23 }

(如果您需要所有文档的频率:请注意,您可以在没有 TermVector 的情况下访问 PostingEnum)。

关于java - 如何使用 Lucene5.3 获取每个文档中特定术语的术语频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34471321/

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