一、实验目的
- 掌握数据预处理的一般流程;
- 使用Python对数据进行预处理;
二、实验内容
一.中文分词
1.Jieba中文分词用法
二.数据清洗
1.数据清洗概述
2.中文语料清洗
三.特征提取及向量空间模型
2.向量空间模型
3.余弦相似度计算
四.权重计算
1.TF-IDF
代码
# coding=utf-8
import codecs
import matplotlib.pyplot as plt
import jieba.analyse
# 停用词表
stopwords = {}.fromkeys([ '的', '或', '等', '是', '有', '之', '与',
'和', '也', '被', '吗', '于', '中', '最',
'“', '”', '。', ',', '?', '、', ';' ])
source = open("test.txt", 'r')
result = codecs.open("result.txt", 'w', 'utf-8')
line = source.readline().rstrip('\n')
content = [ ] # 完整文本
while line != "":
seglist = jieba.cut(line, cut_all=False) # 精确模式
final = [ ] # 存储去除停用词内容
for seg in seglist:
if seg not in stopwords:
final.append(seg)
output = ' '.join(list(final)) # 空格拼接
print(output)
content.append(output)
result.write(output + '\r\n')
line = source.readline().rstrip('\n')
else:
source.close()
result.close()
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
# 第一步 生成词频矩阵
corpus = [ ]
for line in open('result.txt', 'r', encoding="utf-8").readlines():
corpus.append(line.strip())
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
word = vectorizer.get_feature_names()
for n in range(len(word)):
print(word[ n ], end=" ")
print('')
print(X.toarray())
# 第二步 计算TF-IDF值
transformer = TfidfTransformer()
print(transformer)
tfidf = transformer.fit_transform(X)
print(tfidf.toarray())
weight = tfidf.toarray()
# 第三步 KMeans聚类
from sklearn.cluster import KMeans
clf = KMeans(n_clusters=3)
s = clf.fit(weight)
y_pred = clf.fit_predict(weight)
print(clf)
print("类簇中心")
print(clf.cluster_centers_) # 类簇中心
print("距离")
print(clf.inertia_) # 距离:用来评估簇的个数是否合适 越小说明簇分的越好
print("预测类标")
print(y_pred) # 预测类标
# 第四步 降维处理
from sklearn.decomposition import PCA
pca = PCA(n_components=2) # 降低成两维绘图
newData = pca.fit_transform(weight)
print("newData")
print(newData)
x = [ n[ 0 ] for n in newData ]
y = [ n[ 1 ] for n in newData ]
# 第五步 可视化
plt.scatter(x, y, c=y_pred, s=200, marker='o')
plt.title("gragh")
plt.xlabel("x")
plt.ylabel("y")
plt.show()