TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序。
TF (Term Frequency) 词频: 指的是某一个给定的词条在该文件中出现的频率;
TF = 词条在文档中出现的次数 / 文档中所有词条的个数
IDF (Inverse Document Frequency) 逆向文件频率:该词条在越多的文章中出现,则说明它对文章没有很强的区分度,在文档中所占的权重也就越小,如果该词条所在的文档数越少,也就是IDF值越大,则说明此词条具有很好的类别区分能力。
IDF = log(文档总数 /出现某词条的不同文档个数) #log是取对数
TFIDF = TF * IDF
应用:
1、提取关键词
2、计算出每篇文章的TFIDF的向量,然后通过余弦向量等方法可以计算出文章之间的相似度。
分词工具可使用IKAnalyzer
使用说明参考:IKAnalyzer中文分词器V2012_FF使用手册.pdf
可配置stopwords停止词字典及扩展字典
测试:
1 import org.wltea.analyzer.core.IKSegmenter; 2 import org.wltea.analyzer.core.Lexeme; 3 4 import java.io.IOException; 5 import java.io.StringReader; 6 7 /** 8 * Created by Edward on 2016/7/21. 9 */ 10 public class Test { 11 public static void main(String[] args) { 12 13 StringReader stringReader = new StringReader("你好,这里是中国,这是个美丽的国家,你喜欢吗?给力呀"); 14 IKSegmenter ikSegmenter = new IKSegmenter(stringReader, true); 15 16 Lexeme lexeme = null ; 17 try { 18 while((lexeme=ikSegmenter.next())!=null) 19 { 20 System.out.println(lexeme.getLexemeText()); 21 } 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 } 26 }
测试结果:
加载扩展停止词典:stopword.dic
你好
这里是
中国
这是
个
美丽
国家
喜欢
给
力
呀
在stopword.dic文件中配置了
的
你