信息内容安全 实验2 基于Python的数据预处理

一、实验目的

  1. 掌握数据预处理的一般流程; 
  2. 使用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()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值