use*_*384 3 java lucene search text-analysis
我正在寻找一个可以计算tf-idf计算的简单java类.我想对2个文件进行相似性测试.我找到了很多使用tf-idf类的BIG API.我不想使用大的jar文件,只是为了做我的简单测试.请帮忙 !或者至少如果有人可以告诉我如何找到TF?和以色列国防军?我会计算结果:)或者如果你能告诉我一些很好的java教程.请不要告诉我看谷歌,我已经做了3天,找不到任何东西:(也请不要把我推荐给Lucene :(
术语频率是术语在特定文档中出现次数的平方根.
逆文档频率是(文档总数(文档总数除以包含术语的文档数))加上一个术语出现零次的情况 - 如果是,显然不要尝试除以零.
如果从该答案中不清楚,每个文档每个术语有一个TF,每个术语有一个IDF.
然后TF-IDF(期限,文件)= TF(期限,文件)*IDF(期限)
最后,使用向量空间模型比较文档,其中每个术语是一个新维度,指向该维度的向量部分的"长度"是TF-IDF计算.每个文档都是一个向量,因此计算两个向量,然后计算它们之间的距离.
因此,要在Java中执行此操作,请使用FileReader或其他内容一次一行地读取文件,并在空格或您要使用的任何其他分隔符上拆分 - 每个单词都是一个术语.计算每个术语在每个文件中出现的次数,以及每个术语出现的文件数.然后,您将拥有执行上述计算所需的一切.
由于我没有别的事可做,我查找了矢量距离公式.干得好:
D=sqrt((x2-x1)^2+(y2-y1)^2+...+(n2-n1)^2)
Run Code Online (Sandbox Code Playgroud)
为此,x1是文档1中术语x的TF-IDF.
编辑:回答您关于如何计算文档中的单词的问题:
new BufferedReader(new FileReader(filename))- 你可以调用BufferedReader.readLine()while循环,每次都检查null.line.split("\\s")- 将在空格上拆分行,并为您提供所有单词的数组.HashMap.现在,在为每个文档计算D之后,您将得到X值,其中X是文档数.将所有文档相互比较只是进行X ^ 2比较 - 这对于10,000来说不应该特别长.请记住,如果两个文档的D值之间的差值的绝对值较低,则它们会更相似.因此,您可以计算每对文档的Ds之间的差异,并将其存储在优先级队列或其他一些排序结构中,以便最相似的文档冒泡到顶部.合理?
| 归档时间: |
|
| 查看次数: |
12392 次 |
| 最近记录: |