K-means实现中文短文本聚类

本文介绍了使用jieba分词、去除停用词、TF-IDF权重计算及K-means聚类对中文短文本进行预处理和分析的详细流程。在TF-IDF计算过程中遇到溢出问题,K-means部分仍有疑惑,作者表示需要进一步学习和改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、具体流程

1.读入文本,并进行分词
2.对分词后的文本进行去除停用词
3.使用TF-IDF进行求出权重
4.通过K-means进行聚类
(由于笔者水平较低,只能用自己好理解的方法写,所以看起来很麻烦,见谅)

二、读入文本并分词

1.读入文本
(1)文本来源于搜狗新闻语料库(链接:)
(2)读入文本(代码如下)

def read_from_file(file_name):
    with open(file_name) as fp:
        words = fp.read()
    return words
words = (read_from_file("D:\\PyCharm Community Edition 2018.2.4\\python\\day20181127\\sougou_all\\互联网\\1.txt"))
words1 = (read_from_file("D:\\PyCharm Community Edition 2018.2.4\\python\\day20181127\\sougou_all\\互联网\\2.txt"))
words2 = (read_from_file("D:\\PyCharm Community Edition 2018.2.4\\python\\day20181127\\sougou_all\\互联网\\3.txt"))
words3 = (read_from_file("D:\\PyCharm Community Edition 2018.2.4\\python\\day20181127\\sougou_all\\互联网\\4.txt"))
listall = [words,words1,words2,words3]

2.进行分词
(1)安装jieba库:分词需要安装jieba库,在Pycharm里的setting里的project.interpreter里点击右上方的加号,在搜索框中输入jieba点击应用就可以了。
(2)进行分词:(代码如下)

### 使用K-means进行短文本聚类的方法 对于短文本聚类而言,首先需要将文本转换为数值型特征向量以便于后续处理。通常情况下,可以使用词袋模型(Bag of Words, BoW)、TF-IDF 或者 Word Embedding 方法来完成这一步骤[^1]。 #### 文本预处理 为了提高聚类效果,在构建特征矩阵之前还需要对原始语料库执行一系列清理操作,比如去除停用词、标点符号以及低频词汇等无关紧要的信息。这些措施有助于减少噪声干扰并提升最终结果的质量。 ```python from sklearn.feature_extraction.text import TfidfVectorizer import jieba def preprocess_text(texts): processed_texts = [] for text in texts: words = " ".join(jieba.cut(text)) processed_texts.append(words) return processed_texts ``` #### 构建特征矩阵 接下来便是创建能够反映每篇文档主题特性的稀疏矩阵。这里推荐采用Tf-idf加权方案,因为相比于简单的BoW计数方式,它可以更好地衡量词语的重要性程度: ```python vectorizer = TfidfVectorizer(max_df=0.95, min_df=2, stop_words='english') X = vectorizer.fit_transform(preprocess_text(short_texts)) # short_texts 是待聚类短文本列表 ``` #### 执行K-means聚类 一旦获得了合适的输入形式之后就可以调用 `sklearn.cluster.KMeans` 来运行实际的聚类过程了。值得注意的是,由于 k 值的选择会对性能造成很大影响,所以建议尝试多种不同的设定并通过轮廓系数或其他评估指标挑选最优解。 ```python from sklearn.cluster import KMeans n_clusters = 5 # 需要预先指定类别数目 n_clusters model = KMeans(n_clusters=n_clusters, init="k-means++", random_state=42).fit(X) labels = model.labels_ centroids = model.cluster_centers_ print(f"Cluster labels: {labels}") ``` 上述代码片段展示了如何利用 Python 的 scikit-learn 库快速搭建起一套完整的基于 K-means短文本聚类流程[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值