我在寻找一个简单的java类,可以计算tf-以色列国防军的计算。我想要做的相似性测试月2文件。我找到这么多大API谁使用tf-以色列国防军课。我不想使用一大罐的文件,只是做我的简单测试。请帮帮忙!或atlest如果有人能告诉我怎么找到TF?和以色列国防军?我会计算的结果:) 或 如果你可以告诉我一些良好的java教程。请不要告诉我在找谷歌,我已经有3天没有找到任何事情:( 也请不要引我来分类:设:(

有帮助吗?

解决方案

期频率的平方根是多少次一个期发生在一个特定的文件。

逆文件频率(日志(总数的文件分通过的文件数量,包含术语))加上一个时期发生零时--如果它确实,显然不要尝试分通过零。

如果不是明确答案,有一个TF每期每文件,和一个以色列国防军每期。

然后TF-以色列国防军(术语,即文件)=TF(术语,即文件)*以色列国防军(术语)

最后,使用矢量的空间模型来比较文件,其中每个术语是一个新的层面及的"长度"的一部分的矢量指向这个方面是TF-以色列国防军的计算。每个文档是一种矢量,以计算该两个载体,那么计算它们之间的距离。

因此,要做到这一点,阅读该文件在同一行的时间有FileReader或某事,并拆分上空间或任何其他符,你想要用-每个字都是一个术语。计数的次数,每个术语出现在每一个文件,文件的数量每期出现。然后你一切你需要做的上述计算。

因为我没有别的事要做,我抬头看的矢量距离公式。在这里,你去:

D=sqrt((x2-x1)^2+(y2-y1)^2+...+(n2-n1)^2)

为此目的,x1TF-以色列国防军为期x在文件1。

编辑:在回答您的问题是关于如何计算的话,在一个文件:

  1. 读取文件的在线路线阅读器,就像 new BufferedReader(new FileReader(filename)) -你可以叫 BufferedReader.readLine() 在一段时间的循环,检查每个空的时间。
  2. 每个线上,呼叫 line.split("\\s") -这会分裂你的线上的空白,并给你一个列有所有的话。
  3. 对于每一个字,增加1词的数目前的文件。这可以使用 HashMap.

现在,在计算每个D号文件,你会有的X值,其中X是数量的文件。来比较所有文件对彼此做到的只有X^2的比较-这不应该采取特别长为10 000人。还记得那两个文件都更加相似的如果的绝对值之间的差别他们D值较低。所以你可以计算之间的差Ds的每一个对文件和存储,在优先权排队或一些其他排序后的结构使得大多数类似文件证明泡泡到顶部。有意义吗?

其他提示

agazerboy, Sujit帕尔的博客文章给出计算TF和IDF的完整描述。 WRT验证结果,我建议你开始用小语料库(比如100个文件),这样你可以看到你轻易是否正确。对于10000页的文件,使用Lucene开始看起来像一个非常理性的选择。

当你特别要求不要参考分类:设,请允许我指给你的确切类。这类正在寻找 DefaultSimilarity.它有一个非常简单的API计算TF和以色列国防军。见java码 在这里,.或者你可以只是实现自己作为指定的DefaultSimilarity文件。

          TF = sqrt(freq)

          IDF = log(numDocs/(docFreq+1)) + 1.

日志和sqrt功能都是使用湿的实际价值。使用的原料价值可以扭曲的结果显着。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top