当前位置:   article > 正文

TF-IDF(java实现)_java中使用tf-idf

java中使用tf-idf

0写在前面:

前些天研究所有个处理文本的任务,将文本分完词然后利用tfidf计算每个文档中单词的tfidf值,其中文本(是一些舆情的新闻)已经有特定标签,表示是正向、负向还是中性的文本。后续使用这些处理好的文档来做一些舆情的情感预测。
在网上查找了一些有关java编写的tfidf程序,发现有的写的很混乱,而且没有相关的注释,阅读起来有很大的不方便,遂自己重写编写了一下tfidf,大神轻喷代码。


1.tfidf的思想

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率。
IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。
但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处. 在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。


2.程序实现

首先是计算tf的代码:我们使用map来存储tf的结果,这个地方需要注意的是,我们先通过分词软件将所有的文档读成一个map,Map< String,String >其中key是每个文档的文档名,对应的value是

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/937371
推荐阅读
相关标签
  

闽ICP备14008679号