如何在java中实现idf?

时间:2011-02-27 06:20:17

标签: java

  

可能重复:
  Any tutorial or code for Tf Idf in java

IDF是逆文档频率。

IDF = log(包含术语/文件数的文件)

如何在java中执行此操作?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

怎么样:

static double idf(int docTermCount, int totalNumDocuments) 
{ return Math.log((double)docTermCount / (double)totalNumDocuments); }

(这基本上是一种幽默的说法:告诉我们更多关于你的情况,也许我们可以提供帮助。什么是文件?它的代表性是什么?

只需使用Lucene

  

Apache Lucene(TM)是一个   高性能,功能齐全的文字   完全写的搜索引擎库   在Java中。这是一项适合的技术   几乎任何应用程序   需要全文搜索,特别是   跨平台。

它提供IDF here

如果您不使用Lucene

好的,我可以根据您的评论草绘解决方案,我们会看看它是否有帮助:

  1. 您需要确定要考虑的文件。也许你有一个明确的列表,或者你有一个文件名模式?

  2. 识别完文件后,您需要对它们进行迭代,可能是java中的File个对象。

  3. 对于每个文件,您都需要打开该文件(例如,使用围绕BufferedInputReader缠绕的InputStreamReader的{​​{1}}。

  4. 您需要知道如何标记文件内容;也许只是使用空格和File.getInputStream()对象或类似物。

  5. 您需要一个数据结构(可能是Scanner),以便将文件中找到的字词映射到包含术语计数和位置的Map<String,Record>

  6. 您可以考虑使用可以为您完成部分或全部操作的工具。我想,Lucene可能会有一些基础设施可供使用。