鬼吹灯文本挖掘1:jieba分词和CountVectorizer向量化

鬼吹灯文本挖掘1:jieba分词和CountVectorizer向量化

鬼吹灯文本挖掘2:wordcloud 词云展示

鬼吹灯文本挖掘3:关键词提取和使用sklearn 计算TF-IDF矩阵

鬼吹灯文本挖掘4:LDA模型提取文档主题 sklearn LatentDirichletAllocation和gensim LdaModel

鬼吹灯文本挖掘5:sklearn实现文本聚类和文本分类



1. 数据预处理

import pandas as pd
import numpy as np
import jieba
import re

# 1. 读取斗破苍穹文档: 共33章
gcd1_df = pd.read_csv('G:\\自学笔记\\学习笔记:Python数据分析--玩转文本挖掘\\PythonData\\鬼吹灯之精绝古城txt全本精校版.txt',\
                     sep='aaa',encoding='utf-8',names=['txt'])

# 章节判断用变量预处理
def is_chap_head(tmpstr):
    import re
    pattern = re.compile('第.{1,7}章')
    return len(pattern.findall(tmpstr))

gcd1_df['is_chap_head'] = gcd1_df.txt.apply(is_chap_head)
# raw['chap']  = 0  #初始化所有章节为0

 # 章节判断
chap_num = 0
for i in range(len(gcd1_df)):
    if gcd1_df['is_chap_head'][i] == 1:
        chap_num += 1
    gcd1_df.loc[i,'chap'] = chap_num

del gcd1_df['is_chap_head']
txt	chap
0	第一章 白纸人和鼠友	1.0
1	我的祖父叫胡国华,胡家祖上是十里八乡有名的大地主,最辉煌的时期在城里买了三条胡同相连的四十多...	1.0
2	民谚有云:“富不过三代。”这话是非常有道理的,家里纵然有金山银山,也架不住败家子孙的挥霍。	1.0
3	到了民国年间,传到我祖父这一代就开始家道中落了,先是分了家,胡国华也分到了不少家产,足够衣食...	1.0
4	胡国华年轻的时候吃喝嫖赌抽五毒俱全,到最后穷得身上连一个大子儿都没有了。人要是犯了烟瘾,就抓...	1.0


2. 分词

(1)jieba.load_userdict(filepath) 可以加载自定义词典

# 1. 获取停用词库
my_stop_words_path = 'G:\\myLearning\\pythonLearning201712\\myDicts\\新建文件夹\\综合stopword.txt'
stop_words_dict = []
with open(my_stop_words_path, errors='ignore') as fr:
    for line in fr.readlines():
        stop_words_dict.append(line.strip())
print(len(stop_words_dict))

# 2. 加载搜狗中的鬼吹灯词库
gcd_words_dict_path = 'G:\\自学笔记\\学习笔记:Python数据分析--玩转文本挖掘\\PythonData\\鬼吹灯词库.txt'
jieba.load_userdict(gcd_words_dict_path)    

(2)re.sub(pattern, '', inTxt) 根据将inTxt字符串中符号pattern的部分替换为''

# 3. 自定义分词函数
def my_cut(inTxt):
    inTxt = re.sub('[a-zA-Z0-9]','',inTxt)
    jieba.lcut(inTxt)
    words_list = jieba.lcut(inTxt)
    return ' '.join([w for w in words_list if w not in stop_words_dict and len(w) > 1])

(3)gcd1_df.txt.apply(my_cut) 是对gcd1_df.txt中的每条记录应用 my_cut 函数

gcd1_df['words_list'] = gcd1_df.txt.apply(my_cut)
gcd1_df.head()

txt	chap	words_list
0	第一章 白纸人和鼠友	1.0	第一章 白纸人和鼠友
1	我的祖父叫胡国华,胡家祖上是十里八乡有名的大地主,最辉煌的时期在城里买了三条胡同相连的四十多...	1.0	祖父 胡国华 胡家 祖上 十里八乡 有名 地主 辉煌 时期 城里 三条 胡同 相连 四十多间...
2	民谚有云:“富不过三代。”这话是非常有道理的,家里纵然有金山银山,也架不住败家子孙的挥霍。	1.0	民谚 有云 不过 三代 这话 非常 道理 家里 纵然 金山 银山 架不住 败家子 挥霍
3	到了民国年间,传到我祖父这一代就开始家道中落了,先是分了家,胡国华也分到了不少家产,足够衣食...	1.0	民国 年间 传到 祖父 一代 开始 家道中落 先是 胡国华 分到 不少 家产 足够 衣食无忧...
4	胡国华年轻的时候吃喝嫖赌抽五毒俱全,到最后穷得身上连一个大子儿都没有了。人要是犯了烟瘾,就抓...	1.0	胡国华 年轻 时候 吃喝嫖赌 五毒俱全 最后 穷得 身上 一个 大子儿 没有 要是 烟瘾 心...

 

3.  向量化:利用sklearn实现

    (1)df.groupby(['chap']).sum()  表示先根据chap进行分组;然后对chap值相同的部分,txt和words_list两列进行相加,             此处txt和words_list每条记录都是字符串,应用sum()函数就对字符串直接合并

# 1. 针对chap合并
gcd1_chap = gcd1_df.groupby(['chap']).sum()
gcd1_chap.head()

txt	words_list
chap		
1.0	第一章 白纸人和鼠友我的祖父叫胡国华,胡家祖上是十里八乡有名的大地主,最辉煌的时期在城里买了...	第一章 白纸人和鼠友祖父 胡国华 胡家 祖上 十里八乡 有名 地主 辉煌 时期 城里 三条 ...
2.0	第二章 《十六字阴阳风水秘术》从那以后胡国华就当了兵,甚得重用,然而在那个时代,天下大乱,军...	第二章 十六字阴阳风水秘术从那以后 胡国华 甚得 重用 然而 那个 时代 天下大乱 军阀 混...
3.0	第三章 大山里的古墓虽说是内蒙,其实离黑龙江不远,都快到外蒙边境了。居民也以汉族为主,只有少...	第三章 大山里的古墓虽说 内蒙 其实 黑龙江 不远 外蒙 边境 居民 汉族 为主 只有 少数...
4.0	第四章 昆仑不冻泉那一年的春天,中国政府的高层因为感受到国际敌对势力的威胁,不断进行战略上的...	第四章 昆仑不冻泉一年 春天 中国政府 高层 因为 感受 国际 敌对势力 威胁 不断 进行 ...
5.0	第五章 火瓢虫进山的第三天早晨,小分队抵达了大冰川,传说这附近有一个极低洼的小型盆地,我们此...	第五章 火瓢虫进山 第三天 早晨 小分队 抵达 冰川 传说 附近 一个 低洼 小型 盆地 我...

     (2)sklearn中的CountVectorizer可以实现将文本转换为稀疏矩阵,此处输入的中文文本必须是要先分好词再按空格分隔               合并为一个字符串才可以。参数min_df=5表示词必须要在至少5个文档中出现过,否则就不考虑。

gcd1_words_list = list(gcd1_chap.words_list)

from sklearn.feature_extraction.text import CountVectorizer

count_vect = CountVectorizer(min_df=5)  #  词至少在5个文档中出现过
gcd1_words_vec = count_vect.fit_transform(gcd1_words_list)
gcd1_words_vec

<33x1654 sparse matrix of type '<class 'numpy.int64'>'
	with 16484 stored elements in Compressed Sparse Row format>

    (3) 此稀疏矩阵可以方便地转换为数组/矩阵

gcd1_words_vec.toarray()
array([[ 0,  0,  4, ...,  0,  0,  2],
       [ 0,  0,  2, ...,  0,  0,  1],
       [ 3,  0, 16, ...,  0,  0,  1],
       ...,
       [ 3,  0, 13, ...,  0,  0,  1],
       [ 1,  0,  4, ...,  0,  8,  1],
       [ 0,  0,  5, ...,  0,  0,  0]], dtype=int64)

gcd1_words_vec.todense()
matrix([[ 0,  0,  4, ...,  0,  0,  2],
        [ 0,  0,  2, ...,  0,  0,  1],
        [ 3,  0, 16, ...,  0,  0,  1],
        ...,
        [ 3,  0, 13, ...,  0,  0,  1],
        [ 1,  0,  4, ...,  0,  8,  1],
        [ 0,  0,  5, ...,  0,  0,  0]], dtype=int64)

count_vect.get_feature_names()[-10:]
['黄沙', '黑乎乎', '黑暗', '黑沙漠', '黑漆漆', '黑色', '黑蛇', '黑风口', '黑驴蹄子', '鼻子']


  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
文本挖掘是指从大量文本数据中自动提取出有用的信息和知识的过程。而jieba分词是一种常用的中文分词工具,可以将中文文本按照词语切分成若干个词汇,从而为文本挖掘提供了基础。 以下是用jieba分词进行文本挖掘的步骤: 1. 导入jieba库 ``` import jieba ``` 2. 加载文本数据 假设我们有一个文本文件,名为“data.txt”,其中包含一些中文文本数据。我们可以使用以下代码将文本数据读入程序中: ``` with open('data.txt', 'r', encoding='utf-8') as f: text = f.read() ``` 3. 对文本数据进行分词 使用jieba分词对文本数据进行分词,得到词语列表: ``` words = jieba.lcut(text) ``` 4. 进行文本挖掘 利用分词得到的词语列表进行文本挖掘。常见的文本挖掘任务包括: - 关键词提取:从文本中提取出关键词,用于文本分类、聚类等任务。 ``` import jieba.analyse # 提取前10个关键词及其权重 keywords = jieba.analyse.extract_tags(text, topK=10, withWeight=True) for keyword, weight in keywords: print(keyword, weight) ``` - 情感分析:判断文本的情感倾向,如积极、消极或中性。 ``` import jieba.sentiment # 加载情感分析模型 jieba.sentiment.analyse.set_sentiment_file('sentiment.txt') # 获取文本的情感倾向 sentiment_score = jieba.sentiment.analyse.sentiment(text) if sentiment_score > 0: print('这是一篇积极的文章') elif sentiment_score < 0: print('这是一篇消极的文章') else: print('这是一篇中性的文章') ``` - 主题建模:从文本中提取出主题,用于文本分类、聚类等任务。 ``` import jieba.analyse from gensim import corpora, models # 提取关键词列表 keywords = jieba.analyse.extract_tags(text, topK=10) # 构建语料库 corpus = [jieba.lcut(sentence) for sentence in text.split('\n')] # 构建词袋模型 dictionary = corpora.Dictionary(corpus) corpus_bow = [dictionary.doc2bow(sentence) for sentence in corpus] # 训练LDA模型 lda_model = models.ldamodel.LdaModel(corpus_bow, num_topics=3, id2word=dictionary) # 输出每个主题的关键词 for i, topic in enumerate(lda_model.show_topics(num_topics=3, num_words=5)): print('主题%d:%s' % (i+1, topic)) ``` 以上是用jieba分词进行文本挖掘的基本步骤和常见任务。需要注意的是,jieba分词只是文本挖掘的一部分,实际的文本挖掘任务涉及到多个领域的知识,需要综合运用自然语言处理、机器学习、统计学等方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值