写一段python代码,要求是中文文本相似度计算,余弦相似度,input函数,构建词袋,向量表示,有停用词,分词,k-means聚类算法画图
时间: 2024-04-29 17:26:15 浏览: 222
好的,我可以帮您解答这个问题!
以下是给出一个中文文本相似度计算的 Python 代码,它采用了余弦相似度算法,并包含输入功能,构建词袋、向量表示、停用词等关键要素,同时使用了 k-means 聚类算法以及 Matplotlib 库完成数据可视化。
```
# -*- coding:utf-8 -*-
import jieba
import numpy as np
import matplotlib.pyplot as plt
# 定义停用词列表
stop_words = ["的", "是", "在", "有", "不", "和", "中", "我", "了", "他", "都", "这", "为", "之", "于", "上", "到", "可以", "与", "等", "被", "要", "个", "但", "并", "通常", "也", "并且", "我们", "你", "她", "它", "一些", "一定", "一样", "一直"]
# 定义向量生成函数,返回列表形式的向量
def getVector(text):
words = jieba.lcut(text) # 对文本进行分词处理
vector = []
for word in words:
if word not in stop_words: # 过滤停用词
vector.append(word)
unique = list(set(vector)) # 去重
vector_dict = dict.fromkeys(unique, 0) # 生成字典
for word in vector:
vector_dict[word] += 1 # 计算每个词出现次数
vector_list = list(vector_dict.values()) # 转换成向量形式
return vector_list
# 定义余弦相似度计算函数
def cosineSimilarity(vector1, vector2):
# 将向量转为矩阵形式
vector1 = np.mat(vector1)
vector2 = np.mat(vector2)
similarity = float(vector1 * vector2.T) / (np.linalg.norm(vector1) * np.linalg.norm(vector2))
return similarity
# 输入两个中文文本
text1 = input("请输入文本1:")
text2 = input("请输入文本2:")
# 获取向量表示
vector1 = getVector(text1)
vector2 = getVector(text2)
# 计算余弦相似度
similarity = cosineSimilarity(vector1, vector2)
print("两个文本的余弦相似度为:%.2f" % similarity)
# 聚类分析可视化
from sklearn.cluster import KMeans
# 准备数据
X = np.array([vector1, vector2])
# 使用 k-means 聚类分析
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
labels = kmeans.labels_
# 显示可视化图像
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.show()
```
注意,由于需要使用 jieba 库进行分词处理,您需要先安装该库才能正常运行。您可以通过 pip 命令执行 `pip install jieba` 进行安装。同时,该代码中还调用了 numpy 库、matplotlib 库和 sklearn 库,如果您的环境中没有这些库,也同样需要进行安装。
阅读全文