0

好的,让我试着解释一下我做了什么,然后希望我的要求会更清楚。尽管在整个索引中并不常见,但我正在分析文档并尝试根据某些文档中经常出现的单词对它们进行评分。到目前为止,我已经得到了一些非常有趣的结果,并且能够看到给定文档中每个术语的 tf 和 idf。

为了对整个文档进行评分,我想做一些与 tf-idf 相关的事情,但我不想使用文档中的每个术语。现在,我已经对一些过滤器进行了硬编码,以去除过于常见的单词(idf 对我来说太低的单词)和过于不常见的单词(idf 分数非常高的单词;根据我的经验,它们通常是拼写错误)。

有没有一种动态过滤 idf 异常值的好方法?
代替:

if (idf > x && idf < y)
   include the word

我想做类似的事情:

if (idf is in the 60th percentile of idfs for the index)
   include it      

也许这是最好的方法,但我想听听您可能提出的任何其他解决方案,谢谢!

4

1 回答 1

1

评分过程的最后一个步骤是由Similarity对象完成的。我相信你只需要发展你的个性化相似度。DefaultSimilarity(显然)是 Lucene 使用的默认类。它扩展了 TFIDSimilarity。我建议您阅读这两个类的代码,以了解如何开发自己的类。

一旦开发了这个类,假设它被称为 KmancSimilarity,下面是如何让它运行:

Directory dir = <your dir>;
IndexReader index = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(index);
searcher.setSimilarity(new KmancSimilarity());

continue your code...

我一直在使用 4.8 版,所以我不知道它是否对其他人有效。

我希望它会有所帮助。

于 2014-07-23T18:17:04.210 回答