参考 蛙蛙池塘 的 教你文本聚类 一文http://www.kuqin.com/searchengine/20080511/8323.html   以 Java 代码的形式予以实现。一下为我对此文的理解及源码。

摘要:文本聚类是搜索引擎和语义web的基本技术,本文和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的。下面简单列举该程序所涉及的内容:

A》》TF/IDF权重

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条目)

B》》用余弦夹角计算文本相似度,用方差计算两个数据间欧式距离

请参考 数学之美, 以便理解余玄相似度的实际理论应用。

C》》用k-means进行数据聚类等数学和统计知识。关于这些概念可以去google,或者参考文本后的参考链接。

请参考:http://beauty9235.javaeye.com/blog/161675

文本聚类思路:计算两篇文档的相似度,最简单的做法就是用提取文档的TF/IDF权重,然后用余弦定理计算两个多维向量的距离。能计算两个文本间的距离后,用标准的k-means算法就可以实现文本聚类了,具体描述如下:

1》文档预处理:1)文档分词;2)移除停用词;3)单词正规化处理

2》分出的单词就作为索引项(或单词表),它们代表的就是向量空间的项向量

3》计算项权值:这包括要计算1)词频 ; 2)倒排文件频率;3)TF-IDF权值

4》计算文档之间的相似度,一般用余弦相似度(cosine similarity)一同使用于向量空间模型中,用以判断两份文件之间的相似性

测试:首先我们准备以下数据
===================
奥运 拳击 入场券 基本 分罄 邹市明 夺冠 对手 浮出 水面
股民 要 清楚 自己 的 目的
印花税 之 股民 四季
杭州 股民 放 鞭炮 庆祝 印花税 下调
残疾 女 青年 入围 奥运 游泳 比赛 创 奥运 历史 两 项 第一
介绍 一 个 ASP.net MVC 系列 教程
在 asp.net 中 实现 观察者 模式 ,或 有 更 好 的 方法 (续)
输 大钱 的 股民 给 我们 启迪
Asp.Net 页面 执行 流程 分析
运动员 行李 将 “后 上 先 下” 奥运 相关 人员 行李 实名制
asp.net 控件 开发 显示 控件 内容
奥运 票务 网上 成功 订票 后 应 及时 到 银行 代售 网点 付款
某 心理 健康 站 开张 后 首 个 咨询 者 是 位 新 股民
ASP.NET 自定义 控件 复杂 属性 声明 持久性 浅析
==================
很明显以上数据可以分为三类:asp.net,奥运和股民。

我们就写程序来实现它,蛙蛙池塘 已用 C# 实现了,但是为了加深理解,我将代码以Java的形式实现了一遍, 具体参见附件:

下面对整个程序的思路作一下简单描述:

1. 首先要建立分词的方法,提取每个文本的词语,以便于其他方法的调用;

2. 建立构造在所有文本中出现过的词语的向量空间,以便于后面的相似度计算(该方法将调用 1中的方法变量所有的文本,然后构造词语   集合,得到词语的向量空间), 通过 Map<String, Integer> 构造每个词语的索引,便于到排序索引的建立。

3. 正向索引的获取:统计每个词语在每篇文档中的出现次数,描述如下:

首先 1 中的方法提取文本中的词语,然后获得该文本的词语集合(即,消重);然后通过 Arrays.binarySearch  找到每个词语的位置,然后统计个数,记得每篇文章的词语的正向索引。

4. 实现到排序索引:(觉得很经典)

调用 3 中的方法,构造到排序索引,并统计每个词语的文档频率 及 词语的最大文档频率(标准化处理每个词语的频率,为求 td/idf 做准备)

5. 其他地方的关键就在于 文本分词(在该例子中以 接口 实现, 以使的可以提供其他分词方法, 该类例子的实现只是以空    格的方式分割,分词方法正在研究中,希望与大家交流), K-nn聚类方法(该方法在原来的项目中做过,觉得优化空间不大,故只用原型)

聚类结果如下

Iteration 0...
Iteration 1...
Iteration 2...
-----------------
0  聚类成员是 :[2, 3, 7, 11]

印花税 之 股民 四季
杭州 股民 放 鞭炮 庆祝 印花税 下调
输 大钱 的 股民 给 我们 启迪
奥运 票务 网上 成功 订票 后 应 及时 到 银行 代售 网点 付款
-----------------
1  聚类成员是 :[0, 4, 9]

奥运 拳击 入场券 基本 分罄 邹市明 夺冠 对手 浮出 水面
残疾 女 青年 入围 奥运 游泳 比赛 创 奥运 历史 两 项 第一
运动员 行李 将 “后 上 先 下” 奥运 相关 人员 行李 实名制
-----------------
2  聚类成员是 :[1, 5, 6, 8, 10, 12, 13]

股民 要 清楚 自己 的 目的
介绍 一 个 ASP.net MVC 系列 教程
在 asp.net 中 实现 观察者 模式 ,或 有 更 好 的 方法 (续)
Asp.Net 页面 执行 流程 分析
asp.net 控件 开发 显示 控件 内容
某 心理 健康 站 开张 后 首 个 咨询 者 是 位 新 股民
ASP.NET 自定义 控件 复杂 属性 声明 持久性 浅析

好了,写了这么多,我来列举下参考资料吧,当然也是对其他博主的知识产权的尊重,呵呵~

http://www.cnblogs.com/onlytiancai/archive/2008/05/10/1191557.html

http://blog.csdn.net/lkf0217/archive/2009/08/23/4475872.aspx

http://mx19841031.javaeye.com/blog/224443

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Samule704/archive/2010/01/01/5116717.aspx

教你文本聚类(参考http://www.kuqin.com/searchengine/20080511/8323.html)相关推荐

  1. 蛙蛙推荐:蛙蛙教你文本聚类 - 蛙蛙王子 - 博客园

    蛙蛙推荐:蛙蛙教你文本聚类 - 蛙蛙王子 - 博客园 蛙蛙推荐:蛙蛙教你文本聚类 - 蛙蛙王子 - 博客园 蛙蛙推荐:蛙蛙教你文本聚类 摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一 ...

  2. 蛙蛙推荐:蛙蛙教你文本聚类

    蛙蛙推荐:蛙蛙教你文本聚类 摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的.这 ...

  3. 文本聚类算法Java实现

    蛙蛙推荐:蛙蛙教你文本聚类 摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的.这 ...

  4. 基于K-Means的文本聚类算法

    源代码下载:TDIDF_Demo.rar        声明:本文代码思路完全来自蛙蛙池塘的博客,只为技术交流用途,无其他目的 昨天有幸拜读了蛙蛙池塘的<蛙蛙推荐:蛙蛙教你文本聚类>这篇文 ...

  5. 新手探索NLP(十二)——文本聚类

    简介 聚类又称群分析,是数据挖掘的一种重要的思想,聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点.聚类分 ...

  6. 模糊c均值聚类_六种常用的文本聚类方法介绍

    文本聚类算法介绍 分类和聚类都是文本挖掘中常使用的方法,他们的目的都是将相似度高的对象归类,不同点在于分类是采用监督学习,分类算法按照已经定义好的类别来识别一篇文本,而聚类是将若干文本进行相似度比较, ...

  7. 基于聚类算法的文本热点问题挖掘算例实现(文本聚类)

    在现实生活中,有时候我们可能得到一大堆无标签文本,这时候可能需要对文本进行聚类挖掘,找出热点问题是什么. 文本聚类 第一步:数据读取 import pandas as pd import re imp ...

  8. SinglepassTextCluster项目:基于single-pass算法思想的自动文本聚类组件

    项目的背景 SinglepassTextCluster, an TextCluster tool based on Singlepass cluster algorithm that use tfid ...

  9. 中文文本聚类(切词以及Kmeans聚类)

    简介 一 切词 二 去除停用词 三 构建词袋空间VSMvector space model 四 将单词出现的次数转化为权值TF-IDF 五 用K-means算法进行聚类 六 总结 简介 查看百度搜索中 ...

最新文章

  1. LeetCode: Jump Game II
  2. 信息系统项目管理师-常用技术标准考点笔记
  3. linux查看文件只会用vi?除了vi,这几个文件查看的命令,让你爱不释手!
  4. 09-排序1 排序 (25 分)
  5. 服务器新硬盘如何挂在,Ubuntu服务器挂载新硬盘的步骤
  6. 立创EDA元件转换为AD库封装(Altium Designer)
  7. Servlet doGet doPost 中获取参数 中文乱码
  8. 恢复触摸板功能的方法
  9. 诺诺开放平台(电子发票、智能编码、发票查验接口调用)
  10. 《利用Python进行数据分析》第9章 分组级运算和转换笔记
  11. 试位法的matlab程序步骤,MATLAB程序设计导论简介,目录书摘
  12. Tensor.shape[0]的理解
  13. and desgin Vue页面,使用watch监视, <a-input>内的值, 自动计算出填入框的值,用vue中watch监听input组件的变化
  14. python数字转换为大写中文_阿拉伯数字金额转中文大写 (python实现)
  15. 微软壁纸。我全部都要
  16. 李沐-斯坦福《实用机器学习》-01章
  17. 最后的舞,请与我一起跳
  18. 北京队“接触风波”受罚背后:CBA职业化不断进步
  19. 打印ASCII码 c++
  20. linux下编译Zero C ICE

热门文章

  1. 企业对接Walmart平台常见报错
  2. 计算机辅助项目管理课程方案,计算机辅助项目管理课程设计_大学论文.docx
  3. 如何用python把Mac录屏转换成GIF
  4. iphone11各机型对比_三款机型运行速度对比,iPhone11Pro表现如何?
  5. PRJ: LGA Design
  6. jdbc连接mysql数据库,设置字符集编码
  7. c#计算标准偏差实现跟excel中一样的STDEVP()
  8. dell加装固态硬盘_[图解]戴尔灵越15R 5537怎么更换加装固态硬盘?
  9. 浅谈网站的logo设计
  10. unity3d学习笔记-报错