Text Clustering in R

Text Clustering in R

建立词-文档矩阵

l  获取数据源

由于要分的词语里面有较多时属于人名,我们引入搜狗细胞库的人名词库。

installDict("E:\明星【官方推荐】.scel",dictname="starsName")

引入要聚类的文本

> df=read.table("F:/testString.txt")#以数据框的形式保存

> edit(data)

 

有这些文本,是从网上随机摘取的。

分词

我们直接将分词的结果也保留到数据框里面

> df$seg=segmentCN(gsub(" ","",df[1:length(df[,1]),]))

> df$seg=as.character(df$seg)#转化为文本

创建语料库

> corpus=Corpus(DataframeSource(df)) #以数据框作为源

我们看看语料库有些什么,

> inspect(corpus)

可以看到,分词的结果也是以向量的形式保存下来的。

 

l  建立词-文档矩阵

> tdm=TermDocumentMatrix(corpus)

> tdm

 

由于是由向量表示的,在聚类时候应转为矩阵形式。

> tdMatrix=as.matrix(tdm)

 

聚类

l  聚类的方法有很多了,我们先用k-means试下

>kmeans <- kmeans(t(tdMatrix),3)

 

聚类结果可以看到簇的分布情况

1

据日本新闻网10日报道,日本政府为了强化首都的防卫,决定在防卫省所在地建立一个反导防御基地

3

2

据新加坡联合早报11日报道,在泰国,数万名支持政府的红衫军昨天(10日)在曼谷西郊举行大规模集会,声言反抗反政府力量

2

3

美国拥有世界上规模最大、力量最强的反恐部队,包括陆军特种部队“绿色贝雷帽”、海豹突击队及三角洲特种部队等。海豹突击队

2

4

人民网5月11日讯伊朗军方宣布,已经在霍尔木兹海峡海峡附近建了多个无人机基地,伊朗无人机要不间断地在该海峡和波斯湾北部

2

5

美国负责东亚和太平洋事务的助理国务卿拉塞尔(DanielR.Russel)周四在河内表示,美国对中国与越南之间的紧张局势升级感到非常

2

6

何为颠覆?百度一下,这个词的定义是指对某项事物造成强烈冲击改变,使事物本质发生变化。事实上,从PC互联网时代到移动互联网时代

3

7

昨日,工业和信息化部、国家发展改革委《关于电信业务资费实行市场调节价的通告》(以下简称《通告》),宣告电信业务资费正式

2

8

今天,我们正处于决策成本产生巨变的爆发点,过去那些想尽办法都无法获取的数据,在今天唾手可得,而当有些表面上完全不相关的行业

3

9

首届清华五道口全球金融论坛,于2014年5月10日——5月12日在清华大学举办。论坛由清华大学主办,清华大学五道口金融学院和清华

3

10

投资理财服务,其实是非常低频次高客单价的服务,它的规模经济非常明显,P2P平台需要在互联网上寻找这样的客户。”有利网CEO刘雁南说这番话

2

11

今晚东方卫视播出的大型喜剧真人秀《笑傲江湖》,相声名家马三立孙子马小川(见左图,图TP)带着爷爷的经典相声亮相现场,却遭遇冷场尴尬

1

12

昨晚,第21届北京大学生电影节在国家奥林匹克体育中心闭幕。最终,汤唯凭借《北京遇上西雅图》摘下影后桂冠;杨颖

3

13

据香港媒体报道,刘嘉玲、Angelababy、林志玲、高圆圆等前晚在上海出席时装品牌活动,场内美女如云,众人更大斗性感。

2

14

5月11日母亲节期间,《舌尖上的中国2》导演邓洁发出长微博,针对此前《家常》节目播出后,遭受质疑的“子钰母女事件”作出回应

3

15

新浪娱乐讯5月10日晚,由共青团中央、中国残疾人联合会、中国青年志愿者协会、北京大学等共同主办的“心手相牵,共享阳光——中

3

l  奇异值分解

对于大的文本,我们不得不对其进行降维,然后再聚类

为方便在图中显示,我们取nv=2,即文档由一组二维变量衡量

> svdMatrix=svd(tdMatrix,nv=2)

> svdMatrix$v

 

在图中表示

> plot(svdMatrix$v)

 

对分解后的矩阵进行聚类

> svdkmeans=kmeans(as.matrix(svdMatrix$v),3)

> svdkmeans

 

与上图的簇分布情况对照:

 

可以看到,经过奇异值分解之后的簇分布大致与直接聚类的分布相似。但奇异值分解却将原来的158维降到了2维,若是有大量长文本,经过奇异值分解后效率可以提高很多。

l  其他聚类结果

> clara(svdMatrix$v,3)

1 2 2 2 2 1 2 1 1 2 3 1 2 1 1

 

> fanClus=fanny(svdMatrix$v,3)

1 2 2 2 1 3 2 3 3 2 3 3 2 1 1

> clusplot(fanClus)

 

> pamClus=pam(svdMatrix$v,3)

1 2 2 2 1 1 2 1 1 2 3 1 2 1 1

 

原文地址:https://www.cnblogs.com/mixes/p/3723491.html