IDF是逆文档频率。
IDF = log(包含术语/文件数的文件)
如何在java中执行此操作?
有什么建议吗?
答案 0 :(得分:1)
怎么样:
static double idf(int docTermCount, int totalNumDocuments)
{ return Math.log((double)docTermCount / (double)totalNumDocuments); }
(这基本上是一种幽默的说法:告诉我们更多关于你的情况,也许我们可以提供帮助。什么是文件?它的代表性是什么?
Apache Lucene(TM)是一个 高性能,功能齐全的文字 完全写的搜索引擎库 在Java中。这是一项适合的技术 几乎任何应用程序 需要全文搜索,特别是 跨平台。
它提供IDF here。
好的,我可以根据您的评论草绘解决方案,我们会看看它是否有帮助:
您需要确定要考虑的文件。也许你有一个明确的列表,或者你有一个文件名模式?
识别完文件后,您需要对它们进行迭代,可能是java中的File
个对象。
对于每个文件,您都需要打开该文件(例如,使用围绕BufferedInputReader
缠绕的InputStreamReader
的{{1}}。
您需要知道如何标记文件内容;也许只是使用空格和File.getInputStream()
对象或类似物。
您需要一个数据结构(可能是Scanner
),以便将文件中找到的字词映射到包含术语计数和位置的Map<String,Record>
。
您可以考虑使用可以为您完成部分或全部操作的工具。我想,Lucene可能会有一些基础设施可供使用。