计算机毕设 基于机器学习的文本聚类 - 可用于舆情分析

文章目录

  • 0 简介
  • 1 项目介绍
    • 1.1 提取文本特征
    • 1.2 聚类算法选择
  • 2 代码实现
    • 2.1 中文文本预处理
    • 2.2 特征提取
      • 2.2.1 Tf-idf
      • 2.2.2 word2vec
    • 2.3 聚类算法
      • 2.3.1 k-means
    • 2.3.2 DBSCAN
    • 2.4 实现效果
      • 2.4.1 tf-idf + k-means聚类结果
      • 2.4.2 word2vec + k-means 聚类结果
  • 最后

0 简介

今天学长向大家介绍一个毕设项目,中文文本分类技术

中文文本分类 ( 机器学习 和 深度学习 ) - 新闻分类 情感分类 垃圾邮件分类

1 项目介绍

由于项目需要,需要对旅游游记文本进行聚类,为打标签做指导,所以调研了主流的短文本聚类方法,文本聚类主要还是分成两个方面。

1.1 提取文本特征

在《数学之美》前几章中,详细讲了为何要将文本这个自然语言领域的事物,转换成数学领域能处理的向量、矩阵。为了分析一段文本,我们需要首先得到这段文本的表示向量,这个向量就可以作为文本的特征输入决策器中进行判决。

1.2 聚类算法选择

这里的聚类算法就是上面说的决策器。聚类算法主要分成两大类,一类是基于距离的迭代算法,比如k-means,还有一类是基于密度的流式聚类算法,比如DBSCAN。他们各有优劣,通常由于我们并不清楚聚类的簇数量,并且由于海量文本迭代的效率比较低,真实应用场景中,我们在聚类算法的选择上,更加倾向选DBSCAN这类的算法。

这里学长做了几组对照实验,分别使用tf-idf或word2vec作为文本的特征,采用k-means或者DBSCAN进行聚类分析。实验流程如下:

2 代码实现

2.1 中文文本预处理

将清洗过的数据进行分词、去停用词。其中分词的时候,载入预先设置好的自定义词典,提高分词精度。笔者自己写了一个分词的类,提高代码复用率。

from tools.tokenizer.wordCut import WordCutmydict = ["mysenicdict.txt", "myfooddict.txt"]
file_path = '/home/zcy/haiNan/texttravelgen/data/clean_comments.txt'
# 默认是精确模式
test = WordCut()
test.addDictionary(mydict) # 加载自定义词典# 分词,去停用词(集成在类中了),不显示在console,保存分词后的文件到file_path目录
test.seg_file(file_path, show=False, write=True)

2.2 特征提取

2.2.1 Tf-idf

# 词频矩阵:矩阵元素a[i][j] 表示j词在i类文本下的词频 
vectorizer = CountVectorizer()
# 统计每个词语的tf-idf权值
transformer = TfidfTransformer() 
freq_word_matrix = vectorizer.fit_transform(corpus)
#获取词袋模型中的所有词语
word = vectorizer.get_feature_names()
tfidf = transformer.fit_transform(freq_word_matrix)
# 元素w[i][j]表示j词在i类文本中的tf-idf权重
weight = tfidf.toarray()z

2.2.2 word2vec

# doc2vec
#训练并保存模型
import gensimsentences = gensim.models.doc2vec.TaggedLineDocument(token_path)
model = gensim.models.Doc2Vec(sentences, size=100, window=2, min_count=3)
model.train(sentences,total_examples=model.corpus_count, epochs=1000)
model.save('../model/demoDoc2Vec.pkl')

2.3 聚类算法

2.3.1 k-means

# K-means聚类
print 'Start K-means:'
from sklearn.cluster import KMeans
clf = KMeans(n_clusters=20)
s = clf.fit(model.docvecs)
print s
#20个中心点  
print(clf.cluster_centers_)        
#每个样本所属的簇  
print(clf.labels_)  
i = 1  
while i <= len(clf.labels_):print i, clf.labels_[i-1]  i = i + 1    
#用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数  
print(clf.inertia_)

2.3.2 DBSCAN

# dbscan 密度聚类
from sklearn.cluster import DBSCAN# Compute DBSCAN
db = DBSCAN(eps=0.005, min_samples=10).fit(weight)
print db.core_sample_indices_
db.labels_

2.4 实现效果

为了将聚类后的类别信息与原文信对照起来,方便查看,笔者写了一个类提高重用效率,将结果写到ori_path的路径下,并提供了排序的功能,代码如下:

from tools.labelMap.labelText import LabelTextlabel = clf.labels_
ori_path = "../data/clean_comments.txt"
labelAndText = LabelText(label, ori_path)
labelAndText.sortByLabel(write=True)

2.4.1 tf-idf + k-means聚类结果

new file saved in /home/zhouchengyu/haiNan/texttravelgen/data/sortedLabelText.csv
0   一下机场携程订的专车很准时的来接了我们,服务也很好,经过大约40分钟的车程,我们从凤凰机场来到了亚龙湾。
0   下午18:35坐动车返回美兰,住在机场附近小旅馆,老板人倒是挺好,挺便宜,装修这些也算对得起这个价格了。
0   中午十二点,飞机准时到达海口美兰国际机场。到达厅内,爷爷奶奶早已等待多时。
0   祥鹏航空8L9963,特价机票,加上机场建设费及燃油费等约300。我们老大火速抢完了27人的机票,带着这个超级散团,出发!
0   到了海南一下飞机,湿热的空气就迎面扑来。没几步路就出汗了。出了机场赶紧找订好的住宿的地方。
0   作为一个北方人去过的最南端就是福州了,也是今年才去的,一般都在武汉止步。终于在北京等了个把星期,可以坐上飞机出发啦~~~
0   新加坡的过境签相当方便,填一张入境卡就可以了,而且居然不用排队。兴冲冲地通过海关后发现机场的两小时的免费观光大巴居然是在转机区,而不是入境后,只好换了100人民币的新币开始自助公交游。从机场坐地铁到Raffles Palace,去找鱼尾狮公园(Merlion Park)。奇怪的是这么有名的地标性景点一路上居然没有任何指示……雕像附近合影的人超多,大家都是到此一游。
0   所有的机场大巴都绕来绕去从同一条线路开往机场了,40分钟后到达机场
0   樟宜机场被多家机构评为世界最佳机场是不无道理的。整个机场就像一个购物休闲中心,吃喝玩乐各项设施应有尽有。在这里转机丝毫不用担心如何消磨时间。新加坡机场的登机一般提前一个小时,因为安检被安排在了各个登机口。这样布局的好处是在机场里可以畅行无阻。加上新加坡机场实际上只有国际区没有国内区(全国就这一个机场嘛),因此除了边检,其他区域都是连成一片的。
0   上班之后,基本每次出门都是想要叫车。但是这次想来一次随心所欲的旅行,从出发开始就不再走便捷的方法了,机场大巴走起。这才发现,志诚丽柏那个酒店门口的大巴是半小时发一次,10分一次,40分一次。会先到西稍门,然后才出发。
0   用银行贵宾卡享受了机场贵宾室

label0都与机场有关,可以看出来聚类效果还是不错的。

3   在沙滩上玩了一会我就去附近泳池边的WC换泳衣,回来和LILY扑向大海试图游泳。其实浪还是挺大的,我们在靠近沙滩的地方都不太能稳住自己,远处几个金发的外国姑娘却能在浪里漂浮自如,也许人家从小在海滩玩到大的吧!羡慕啊。    我在水里玩的不亦乐乎,LILY时刻紧盯着我的皮肤怕我晒伤,我很惊讶他有着能看出我皮肤被晒黑程度的能力,我自己看不出来……在海里玩了半小时的样子他果断拖回乐不思蜀的我,说再晒我就要回去哭了。
3   南湾猴岛其实是个半岛,但这里的位置得天独厚,三面环海,景色和离岛一样的美。除了拥有优越的热带海岛生态环境、猕猴特色资源、优质的海水以及滨海沙滩,还有水上疍家鱼排的独特民俗风情。全国最长的跨海观光索道,犹如一条凌空彩链横跨新村港湾,将神秘的南湾猴岛、迷人的热带港湾、浓郁的疍家民俗、喧闹的渔港风情等串成一线。
3   大东海是三亚我常去的沙滩,其他地方不是下饺子就是煮馄饨。
3   刚上船的时候心情还是挺激动的~想象岛上迷人的风景,结果到站之后看到码头左边的天空还有点蓝色了,就先往左边走去看看,一路上人都很多,零星的开着几个小店,大概走了100多m的样子都都到头了,路封着的,一堆建筑垃圾在哪儿堆着,也没看见机械设备动工。于是只能调头往回网右边走,其实右边一来我就看见了只有很小一片沙滩,我还以为左边会有一大片沙滩和浮潜的海域等着我们呢~越往右边走越是失望啊,先经过美食一条街,各种高价的食品和纪念品出售,等终于穿过美食街的人群到了海边那更是失望,比大东海划分的每个游泳区域还要小一半以上~还只有三个区域,完全没得浮潜地方!我也是醉了,我还以为是像东南亚那些海岛一样,上岛都是很宽泛的游泳和浮潜区域,结果。。。而且这个区域离码头也不远,水质可想而知,当然人也非常多,瞬间没了下海的欲望~真不知道网上那些好评怎么来的~商业化的气息太重了,我不相信大多数人来这里是为了去深潜去玩那些海上项目~家人都说还不如在大东海游泳,还要花100多的门票来看这乌泱泱的水~还好海边沙滩椅收费不贵,15块一张随便躺
3   三亚自游行心得1、我不想去景点打卡,只为纯度假。所以选择住大东海,我住在大菠萝(类似于京华城)附近的哈曼酒店。去年才开的五星酒店,设施完备,吃住行都方便!哈曼有私家沙滩,有酒店电瓶车接送,服务很贴心!不是所有酒店都有私家沙滩,需看清。如果住在没有私家沙滩的酒店,各种不便!我住的是哈曼的16楼行政山海房,(最高17层)记住:一定要高楼层,楼层低了什么都看不到2、大东海商业发达,价廉物美,只是海水和沙滩略逊亚龙湾一筹。                               3、交通:因为我住大东海,很便利,没有租车的必要。去较远的景点、接送机等,我全程易到专车、滴滴专车,非常方便4、关于第一市场:易到司机告诉我们,那已经相当于旅游商店的性质了,大东海区域用餐,我都在大菠萝。
3   从照片看就知道这时候的三亚天气不是很好,时常乌云甚至下雨,所以找出来的照片好不好看很大程度取决于天气怎么样啦大东海海滩上人很多,长长的海岸线上都是人,我去的这个时候天不是很热,海水还是有些凉的,多以游泳的人并不多,大多数都在沙滩上捡贝壳或石头。
3   收拾完毕!步行至大东海广场的沙滩~脱鞋玩水啦~!
3   亚龙湾是很长一个海湾。沙滩除了名地细腻。有很多的星级酒店私人沙滩。当然我们去的是公共开放海滩,建议四点以后再去游泳,否则日晒很严重。我和小果果都在阴凉下。

第3类都与沙滩有关,聚类效果也不错。

2.4.2 word2vec + k-means 聚类结果

1   直到回来后还在流连成都老火锅的味道。真的很好吃。用牛油做锅底,加热后牛油化了,根本不用加水的。
1   离开宽窄巷子,回酒店附近吃了小天鹅,午睡过后下午去人民广场喝茶采耳。
1   黄流老鸭:海南最有特色的美食之一,在三亚,最正的黄流老鸭还是在胜利路的光明黄流老鸭店,十多年的老店,黄流老鸭必然是白切的才是最好的,也是最好吃的,再加上微热的蘸料,就更美味了,我们俩人点了白切黄流老鸭、虾酱地瓜叶和冬瓜海螺汤,冬瓜海螺汤,可以说是此次去三亚吃到的最好吃的汤品,其他地方吃到的总有那么些不新鲜的无奈~,这的冬瓜海螺汤太让我喜欢了,现在想起来都能感觉到的味美~当然,鸭肉那可是吃得精光的~,海南的特色美食啊~~
1   很多老人在这里,聊天,喝茶,打牌,老成都的生活。我们也喝了盖碗茶,叫了师傅来采耳,享受安逸。
1   第三次登临这座热带岛屿。2013年来的时候还是一个刚上大一的小姑娘,在海边遇到同是一个人来三亚游玩的泥巴,后来成为了朋友,在上海的时候还一起约着吃过饭,逛过上海博物馆,在夜晚的浦江边散步拍照。    2014年清明,趁着假期,去了海口,约见了在海南念书的闺蜜,住在海口巴纳纳国际青旅和一群来自五湖四海的朋友一起玩杀人游戏到凌晨三点多,第二天醒来和青旅认识的姑娘一起逛海南的菜市场。来自济南的她对南方的蔬果特别感兴趣,她说,因为海南的水果多,于是她就考了个海大的研究生,准备过来捞水果了。    2015年国庆过后,和一起奋战过高考的好朋友一起,在不同的城市出发来到三亚找在三亚念书的闺蜜。一起住在三亚老班长国际青旅,和青旅的义工老板们,去吃了三亚最好吃的炒冰炸鸡,去大东海游泳玩沙子,好是快活。
1   从北京西开出的Z201次列车,在漫长的27小时行驶后来到了我的城市。晚上吃过晚饭,八点多到火车站候车,第二天早上八点就能到三亚了。全程762公里,途中跨越琼州海峡,火车会被拆分成五节运上粤海轮渡,抵达海南岛接驳后将继续行驶。(前三图来自网络,侵删。)
1   海南鸡饭:鸡饭的主料是鸡和大米,最好的鸡饭选用的作料是“文昌鸡”。由于“文昌鸡”供不应求,一般鸡饭摊档选用本地杂色鸡,要求是刚成熟而尚未下蛋的鸡,以1至1.5公斤重为宜。大米选用上等新鲜的优质米,鸡是白切鸡。鸡饭皮色油黄,肉白且嫩,骨髓带血,吃来清甜爽口。这种米饭,油润软滑,香浓味爽。
1   出发前在老班长国际青旅订好住宿。位置就在吉祥街,径直往海边走不到五分钟,吉祥街口有到各个景点的汽车公交,招手即停,交通十分便利。周围有海南最大的超市旺豪超市,还有很多吃东西的小饭馆,住下来不用愁吃的。
1   三个人一起逛超市看海鲜买水果,海洋动物多的就像水族馆。因为海南气候原因,种出来的水果都像是放大版的。(如果不想在街头小贩那里买不足称的水果,可以来超市看看,一般海南的各种水果在这里都可以买到。)
1   清补凉是三亚当地的一种小吃。将红枣、薏米、绿豆、芋头、西瓜、汤圆等煮熟的东西,淋上椰子汁或糖水,清热消暑,是夏季必备的饮品。在冬天也可以吃到热的清补凉。清补凉摊多是设在路旁,摆上一席小桌子和小橱窗,旁边摆上一个保温冰桶,几套塑料的椅子和木桌。清补凉摊的小橱窗里放着一排塑料碗,碗里面分别装着糖水煮的芸豆、煮好的绿豆、通心粉、鹌鹑蛋、菠萝丁、西瓜丁、桂圆肉、红枣、薏米等等,很是诱人

可以发现,类别1的输出基本都是美食,但是也有一些错分的情况发生,考虑到Doc2Vec输出的向量跟向量大小、迭代次数等参数,影响较大,这只是一个Doc2Vec的baseline,这些错误聚类暂时还是可以接受的。

最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抢量双11!抖音商城「官方立减」 缘何成为“爆单神器”?

10月20日抖音商城双11好物节正式开跑&#xff0c;仅仅三天&#xff0c;抖音商城整体GMV对比去年同期提升了200%&#xff0c;而在开跑一周后&#xff0c;一些品牌的销售额已经超过了今年整个618&#xff0c;可谓增势迅猛。其中&#xff0c;平台官方特别推出的「官方立减」玩法&a…

acwing算法基础之搜索与图论--kruskal算法

目录 1 基础知识2 模板3 工程化 1 基础知识 kruskal算法的关键步骤为&#xff1a; 将所有边按照权重从小到大排序。定义集合S&#xff0c;表示生成树。枚举每条边(a,b,c)&#xff0c;起点a&#xff0c;终点b&#xff0c;边长c。如果结点a和结点b不连通&#xff08;用并查集来…

K8S篇之Pod一直处于Pending状态原因解析

常见现象&#xff1a;Pod一直处于Pending状态。 废话不多说&#xff0c;直接上料。 可能原因1&#xff1a;Pod未被调度到节点上。 当 Pod 一直处于 Pending 状态时&#xff0c;说明该 Pod 还未被调度到某个节点上&#xff0c;需查看 Pod 分析问题原因。 例如执行&#xff1a…

计算机网络技术

深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网&#xff08;互联网&#xff09;与因特网的区别与关系 如图所示&#xff0…

【机器学习2】模型评估

模型评估主要分为离线评估和在线评估两个阶段。 针对分类、 排序、 回归、序列预测等不同类型的机器学习问题&#xff0c; 评估指标的选择也有所不同。 1 评估指标 1.1准确率 准确率是指分类正确的样本占总样本个数的比例 但是准确率存在明显的问题&#xff0c;比如当负样本…

【React】05.JSX语法使用上的细节

JSX构建视图的基础知识 JSX&#xff1a;javascript and xml&#xff08;html&#xff09;把JS和HTML标签混合在了一起[并不是我们之前玩的字符串标签] 1、vscode如何支持JSX语法[格式化、快捷提示…] 创建的js文件&#xff0c;把后缀名设置为jsx即可&#xff0c;这样js文件中就…

单词规律问题

给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern “abba”, s “dog cat cat d…

可以体现Python语法精妙的十个例子!

文章目录 前言1.for - else2.一颗星*和两颗星**3.三元表达式4.with - as5.列表推导式6.列表索引的各种骚操作7.lambda函数8.yield 以及生成器和迭代器9.装饰器10.巧用断言assertPython技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学习视频5、实战案例…

“目标值排列匹配“和“背包组合问题“的区别和leetcode例题详解

1 目标值排列匹配 1.1 从目标字符串的角度来看&#xff0c;LC139是一个排列问题&#xff0c;因为最终目标子串的各个字符的顺序是固定的&#xff1f; 当我们从目标字符串 s 的角度来看 LC139 “单词拆分” 问题&#xff0c;确实可以认为它涉及到排列的概念&#xff0c;但这种…

React组件通信:如何优雅地实现组件间的数据传递

在React应用中&#xff0c;组件通信是至关重要的一部分。通过合适的数据传递和交互方式&#xff0c;我们可以构建出更加灵活和高效的前端应用。本文将介绍React组件通信的各种方式&#xff0c;并提供代码实现&#xff0c;帮助你更好地理解和应用这些技术。 1. 使用props进行父子…

acwing算法基础之搜索与图论--prim算法

目录 1 基础知识2 模板3 工程化 1 基础知识 朴素版prim算法的关键步骤&#xff1a; 初始化距离数组dist&#xff0c;将其内的所有元素都设为正无穷大。定义集合S&#xff0c;表示生成树。循环n次&#xff1a;找到不在集合S中且距离集合S最近的结点t&#xff0c;用它去更新剩余…

Java Post请求参数格式为XML

方式一&#xff1a; public static void PostXml1(String url, String xml) throws IOException {OkHttpClient client new OkHttpClient().newBuilder().build();//okhttp3.MediaType mediaType okhttp3.MediaType.parse("application/xml");okhttp3.MediaType m…

MySQL -- mysql connect

MySQL – mysql connect 文章目录 MySQL -- mysql connect一、Connector/C 使用1.环境安装2.尝试链接mysql client 二、MySQL接口1.初始化2.链接数据库3.下发mysql命令4.获取执行结果5.关闭mysql链接6.在C语言中连接MySQL 三、MySQL图形化界面推荐 使用C接口库来进行连接 一、…

【SpringBoot】手写模拟SpringBoot核心流程

依赖包 新建一个工程&#xff0c;包含两个 module&#xff1a; springboot 模块&#xff0c;表示 springboot 源码实现&#xff1b;user 模块&#xff0c;表示业务系统&#xff0c;使用 springboot 模块&#xff1b; 依赖包&#xff1a;Spring、SpringMVC、Tomcat 等&#xff…

oracle中分组函数LISTAGG

前言 Oracle中的 GROUP_CONCAT 函数用于将多行数据合并为一行&#xff0c;并以指定的分隔符分隔各个值。在Oracle中&#xff0c;没有直接的GROUP_CONCAT函数&#xff0c;但可以使用 LISTAGG 函数来实现类似的功能。 如何使用 1、使用SELECT语句选择需要合并的列&#xff0c;…

基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】

基于springboot实现致远汽车租赁平台系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要…

防火防盗防小人 使用 Jasypt 库来加密配置文件

⚔️ 项目配置信息存放在哪&#xff1f; 在日常开发工作中&#xff0c;我们经常需要使用到各种敏感配置&#xff0c;如数据库密码、各厂商的 SecretId、SecretKey 等敏感信息。 通常情况下&#xff0c;我们会将这些敏感信息明文放到配置文件中&#xff0c;或者放到配置中心中。…

pytorch DistributedDataParallel 分布式训练踩坑记录

目录 一、几个比较常见的概念&#xff1a;二、踩坑记录2.1 dist.init_process_group初始化2.2 spawn启动&#xff08;rank怎么来的&#xff09;2.3 loss backward2.4 model cuda设置2.5 数据加载 一、几个比较常见的概念&#xff1a; rank: 多机多卡时代表某一台机器&#xff…

浅谈Elasticsearch监控和日志分析

Elasticsearch 监控和日志分析 Elasticsearch 是一个分布式搜索引擎&#xff0c;它提供了全文搜索、结构化搜索、分析等功能。在实际应用中&#xff0c;监控和日志分析是确保 Elasticsearch 集群稳定、高效运行的关键。本文将详细讲解 Elasticsearch 的监控和日志分析功能&…

rabbitmq 交换机相关实例代码

1.扇形交换机 定义扇形交换机和队列 package com.macro.mall.portal.config;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.…