新闻聚类分群模型

文本数据的读取与处理

1.读取数据

import pandas as pd
df = pd.read_excel('新闻.xlsx')
df.head()

 2.中文分词

(1)简单演示

# 中文分词演示
import jieba
word = jieba.cut('我爱北京天安门')
for i in word:
    print(i)

# 第一条新闻标题
df.iloc[0]['标题']

 

# 第一条新闻标题中文分词
import jieba
word = jieba.cut(df.iloc[0]['标题'])
result = ' '.join(word)
print(result)

 

(2)实战应用

# 通过for循环遍历来进行所有标题的分词
import jieba
words = []
for i, row in df.iterrows():
    word = jieba.cut(row['标题'])
    result = ' '.join(word) 
    words.append(result)

 

 

# 熟悉了上面的过程后,可以把代码合并写成如下形式
import jieba
words = []
for i, row in df.iterrows():
    words.append(' '.join(jieba.cut(row['标题'])))

 

words[0:3]  # 同样展示前三条新闻的分词结果

 

for i, row in df.iterrows():
    print(i)
    print(row)

 

文字转数字:通过建立词频矩阵构造特征变量 

1. 文本向量化基础:建立词频矩阵

# CountVectorizer()函数简单演示
from sklearn.feature_extraction.text import CountVectorizer
test = ['金融 科技 厉害', '华能 信托 厉害']
vect = CountVectorizer()
X = vect.fit_transform(test)
X = X.toarray()
print(X)

# 查看词袋和对应的顺序
words_bag = vect.vocabulary_
print(words_bag)

 

2. 将之前所有的新闻标题进行文本向量化,从而构造特征变量 

# 将之前所有的新闻标题进行文本向量化
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()
X = vect.fit_transform(words)
X = X.toarray()
# 查看所有新闻标题的词袋
words_bag = vect.vocabulary_
print(words_bag)

 3 简单示例 - 取前两条新闻演示

# 查看前两条分词完的新闻
print(words[0])
print(words[1])

# 文本向量化
vect = CountVectorizer()  # 引入CountVectorizer()函数
X_test = vect.fit_transform(words[0:2])  # 将前两条新闻文本向量化
X_test = X_test.toarray()  # 将X_test转为数组
print(X_test)  # 查看生成的二维数组

 

# 查看词袋的第一种方式
words_bag = vect.vocabulary_  # 第一种查看词袋的方式
print(words_bag)  # 查看词袋

 

# 查看词袋的第二种方式
words_bag2 = vect.get_feature_names()  # 第二种查看词袋的方法
print(words_bag2)  # 第二种查看词袋的方式

 

import pandas as pd
df = pd.DataFrame(X_test, columns=words_bag2)
df

 

4 将所有新闻文本向量化并展示

# 将之前所有的新闻标题进行文本向量化并通过pandas展示
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd

# 文本向量化
vect = CountVectorizer()
X = vect.fit_transform(words)  # 将分词后的内容文本向量化
X = X.toarray()

# 查看文本向量化的结果
words_bag2 = vect.get_feature_names()  # 第二种查看词袋的方法
df = pd.DataFrame(X, columns=words_bag2)
df.head()

 

 模型搭建与使用

1.通过KMeans算法进行聚类分群

from sklearn.cluster import KMeans
kms = KMeans(n_clusters=10, random_state=123)
k_data = kms.fit_predict(df)
print(k_data)

import numpy as np
words_ary = np.array(words)
print(words_ary[k_data == 1])  # 可以把数字1改成其他数字看看效果

 

2.通过DBSCAN算法进行聚类分群 

from sklearn.cluster import DBSCAN
dbs = DBSCAN(eps=1, min_samples=3)
d_data = dbs.fit_predict(df)
print(d_data)

模型优化(利用余弦相似度进行优化) 

1.余弦相似度基本概念

words_test = ['想去 华能 信托', '华能 信托 很好 想去', '华能 信托 很好 想去 华能 信托 很好 想去']

# 文本向量化
vect = CountVectorizer()
X_test = vect.fit_transform(words_test)  # 将分词后的内容文本向量化
X_test = X_test.toarray()

# 查看文本向量化的结果
words_bag2 = vect.get_feature_names()  # 第二种查看词袋的方法
df_test = pd.DataFrame(X_test, columns=words_bag2)
df_test.head()

通过numpy库计算欧式距离
import numpy as np
dist = np.linalg.norm(df_test.iloc[0] - df_test.iloc[1])
dist

 

# 计算余弦相似度
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarities  = cosine_similarity(df_test)
cosine_similarities

 

2.余弦相似度实战 - 模型优化

from sklearn.metrics.pairwise import cosine_similarity
cosine_similarities  = cosine_similarity(df)
print(cosine_similarities)

 

from sklearn.cluster import KMeans
kms = KMeans(n_clusters=10, random_state=123)
k_data = kms.fit_predict(cosine_similarities)

 

# 把之前的分词结果转为数组
print(words[0:3])
words_ary = np.array(words)
print(words_ary[0:3])

# 查看分类结果
import numpy as np
words_ary = np.array(words)
print(words_ary[k_data == 3])  # 可以把数字3改成其他数字看看效果

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值