基于kmeans的文本聚类算法.pdfVIP

  • 53
  • 0
  • 约1.44万字
  • 约 18页
  • 2021-06-20 发布于湖南
  • 举报
基于 K-Means 的文本聚类算法 TF-IDF (term frequency –inverse document frequency ) 这是一种用于信息检索的一种常用加权技术。它是一种统计方法,用以评估一个字词 对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件 中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。 假如一篇文件的总词语数是 100 个,而词语“母牛”出现了 3 次,那么“母牛”一词 在该文件中的词频就是 0.03 (3/100) 。一个计算文件频率 (DF) 的方法是测定有多少份 文件出现过“母牛”一词,然后除以文件集里包含的文件总数。所以,如果“母牛”一词 在 1,000 份文件出现过,而文件总数是 10,000,000 份的话,其文件频率就是 0.0001 (1000/10,000,000) 。最后, TF-IDF 分数就可以由计算词频除以文件频率而得到。以上面 的例子来说,“母牛”一词在该文件集的 TF- IDF 分数会是 300 (0.03/0.0001) 。这条公 式的另一个形式是将文件频率取对数。 具体的计算原理,请参考维基百科 tf –idf 条目。下面简单介绍下基本的计算步骤: 1, 文档预处理 :1 )文档分词; 2 )移除停用词; 3 )单词正规化处理 2 ,分出的单词就作为索引项(或单词表),它们代表的就是向量空间的项向量 3 ,计算项权值:这包括要计算 1)词频 ; 2) 倒排文件频率; 3)TF-IDF 权值 4, 计算文档之间的相似度,一般用余弦相似度 (cosine similarity) 一同使用于向量 空间模型中,用以判断两份文件之间的相似性 #include ITokeniser.h #include class TFIDFMeasure { private: StrVec _docs;// 文档集合,每一行字符串代表一份文档 int _numDocs;// 文档数目 int _numTerms;// 单词数目 StrVec _terms;// 单词集合 Int2DVec _termFreq;// 每个单词出现在每份文档中的频率 Double2DVec _termWeight;// 每个单词在每份文档的权重 IntVec _maxTermFreq;// 记录每一份文档的最大词频 IntVec _docFreq;// 出现单词的文档频率 ITokeniser* _tokenizer;// 分词器 map _wordsIndex;// 单词映射表,保存每一个单词及其对应的下标 public: TFIDFMeasure(const StrVec documents,ITokeniser* tokeniser); public: ~TFIDFMeasure(void); protected: void Init();// 初始化 TF-IDF 计算器 void GenerateTerms(const StrVec docs,StrVec terms);// 分词处理 void GenerateTermFrequency();// 计算词频 void GenerateTermWeight();// 计算词的权重 void GetWordFrequency(string input,map freq); // 实际统计词频函数 int CountWords(string word, const StrVec words);// 统计词数 int GetTermIndex(const stri

文档评论(0)

1亿VIP精品文档

相关文档