文章目录
0 简介
今天学长向大家介绍一个毕设项目,中文文本分类技术
中文文本分类 ( 机器学习 和 深度学习 ) - 新闻分类 情感分类 垃圾邮件分类
1 项目介绍
由于项目需要,需要对旅游游记文本进行聚类,为打标签做指导,所以调研了主流的短文本聚类方法,文本聚类主要还是分成两个方面。
1.1 提取文本特征
在《数学之美》前几章中,详细讲了为何要将文本这个自然语言领域的事物,转换成数学领域能处理的向量、矩阵。为了分析一段文本,我们需要首先得到这段文本的表示向量,这个向量就可以作为文本的特征输入决策器中进行判决。
1.2 聚类算法选择
这里的聚类算法就是上面说的决策器。聚类算法主要分成两大类,一类是基于距离的迭代算法,比如k-means,还有一类是基于密度的流式聚类算法,比如DBSCAN。他们各有优劣,通常由于我们并不清楚聚类的簇数量,并且由于海量文本迭代的效率比较低,真实应用场景中,我们在聚类算法的选择上,更加倾向选DBSCAN这类的算法。
这里学长做了几组对照实验,分别使用tf-idf或word2vec作为文本的特征,采用k-means或者DBSCAN进行聚类分析。实验流程如下:
2 代码实现
2.1 中文文本预处理
将清洗过的数据进行分词、去停用词。其中分词的时候,载入预先设置好的自定义词典,提高分词精度。笔者自己写了一个分词的类,提高代码复用率。
from tools.tokenizer.wordCut import WordCut
mydict = ["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