Python自然语言理解和文本挖掘课件_第1页
Python自然语言理解和文本挖掘课件_第2页
Python自然语言理解和文本挖掘课件_第3页
Python自然语言理解和文本挖掘课件_第4页
Python自然语言理解和文本挖掘课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、自然语言理解和文本挖掘Python数据处理、分析、可视化与数据化运营08第1页,共66页。本章学习目标了解自然语言常见的数据特征掌握使用结巴分词提取关键字的方法了解主题分析的特点以及应用场景了解自动摘要提取和生成的主要方法掌握如何通过TextRank自动生成摘要并提取关键短语第2页,共66页。8.1 使用结巴分词提取用户评论关键字分词的基本概念算法引言分词是将一系列连续的字符串按照一定逻辑分割成单独的词。在英文中,单词之间是以空格作为自然分界符的;而中文只有字、句和段能通过明显的分界符来简单划界,而词却没有形式上的分界符。第3页,共66页。8.1 使用结巴分词提取用户评论关键字TF-IDF算法

2、基本概念算法引言TF-IDF(term frequencyinverse document frequency)是一种针对关键字的统计分析方法,用来评估关键字或词语对于文档、语料库和文件集合的重要程度。其基本思想是:如果某个关键字在一篇文档中出现的频率(TF,Term Frequency)高,并且在其他文档中很少出现(IDF,Inverse Document Frequency),那么认为该关键字具有良好的区分不同文档的能力,也就越重要。第4页,共66页。8.1 使用结巴分词提取用户评论关键字案例背景描述案例背景用户评论是消费者对企业商品、服务、品牌等方面的信息反馈,其中往往隐含了大量的关键特

3、征,尤其是消费者的特定倾向和喜好。因此,分析用户评论并提取关键字是获得用户真实反馈并分析用户特征的有效方式。第5页,共66页。8.1 使用结巴分词提取用户评论关键字数据源直接通过爬虫从外部网站获取,保存在user_comment.txt中,评论共141条记录,每条记录都是一段用户评论文本。例如:数据源概述goodpython处理大数据确实有优势,开始学习python了。案例讲解第6页,共66页。8.1 使用结巴分词提取用户评论关键字导入库案例过程from pyecharts.charts import WordCloud # WordCloud 用来做词云展示from pyecharts im

4、port options as opts import pandas as pd from jieba.analyse import extract_tags 第7页,共66页。8.1 使用结巴分词提取用户评论关键字读取数据案例过程with open(user_comment.txt,encoding=utf8) as fn: comment_data = fn.read()print(comment_data:50)第8页,共66页。8.1 使用结巴分词提取用户评论关键字提取评论关键字案例过程tags_pairs = extract_tags(comment_data, topK=50, w

5、ithWeight=True, allowPOS=n, v, a) # print(tags_pairs:10) # comment_data为要提取的源文本,字符串类型topK设置提取的关键字的数量,数值型withWeight设置提取关键字时,同步将其对应的权重提取出来,权重便于展示不同的关键字的重要性,以及做可视化展示时大小值的设置第9页,共66页。8.1 使用结巴分词提取用户评论关键字提取评论关键字案例过程tags_pairs = extract_tags(comment_data, topK=50, withWeight=True, allowPOS=n, v, a) # print(

6、tags_pairs:10) # allowPOS设置要提取的关键所属于的词性分类,这里设置n、v、a分别对应名词、动词和形容词,这样保留的结果只在这些类型里面,而其他的词例如副词、助词、数量词等就不提取第10页,共66页。8.1 使用结巴分词提取用户评论关键字提取评论关键字(top10示例)案例过程第11页,共66页。8.1 使用结巴分词提取用户评论关键字常用结巴分词词性分类案例过程一级分类二级分类名称描述a形容词取英语形容词adjective的第1个字母ad副形词直接作状语的形容词。形容词代码a和副词代码d并在一起ag形语素形容词性语素。形容词代码为a,语素代码g并在一起an名形词具有名词

7、功能的形容词。形容词代码a和名词代码n并在一起b区别词取汉字“别”的声母c连词取英语连词conjunction的第1个字母第12页,共66页。8.1 使用结巴分词提取用户评论关键字常用结巴分词词性分类案例过程一级分类二级分类名称描述d副词因其第1个字母已用于形容词,所以取adverb的第2个字母dg副语素副词性语素。副词代码为d,语素代码g前面置以de叹词取英语叹词exclamation的第1个字母f方位词取汉字“方” 的声母g语素绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母h前接成分取英语head的第1个字母第13页,共66页。8.1 使用结巴分词提取用户评论关键字常用结巴分词词

8、性分类案例过程一级分类二级分类名称描述i成语取英语成语idiom的第1个字母j简称略语取汉字“简”的声母k后接成分l习用语习用语尚未成为成语,有点“临时性”,取“临”的声母m数词取英语numeral的第3个字母,n,u已有他用i成语取英语成语idiom的第1个字母第14页,共66页。8.1 使用结巴分词提取用户评论关键字常用结巴分词词性分类案例过程一级分类二级分类名称描述n名词取英语名词noun的第1个字母ng名语素名词性语素。名词代码为n,语素代码g前面置以nnr人名名词代码n和“人(ren)”的声母并在一起ns地名名词代码n和处所词代码s并在一起nt机构团体“团”的声母为t,名词代码n和t

9、并在一起nz其他专名“专”的声母的第1个字母为z,名词代码n和z并在一起第15页,共66页。8.1 使用结巴分词提取用户评论关键字常用结巴分词词性分类案例过程一级分类二级分类名称描述o拟声词取英语拟声词onomatopoeia的第1个字母p介词取英语介词prepositional的第1个字母q量词取英语quantity的第1个字母r代词取英语代词pronoun的第2个字母,因p已用于介词s处所词取英语space的第1个字母t时间词取英语time的第1个字母tg时语素时间词性语素。时间词代码为t,在语素的代码g前面置以t第16页,共66页。8.1 使用结巴分词提取用户评论关键字常用结巴分词词性分

10、类案例过程一级分类二级分类名称描述u助词取英语助词auxiliary 的第2个字母,因a已用于形容词v动词取英语动词verb的第一个字母vd副动词直接作状语的动词。动词和副词的代码并在一起vg动语素动词性语素。动词代码为v,在语素的代码g前面置以Vvn名动词指具有名词功能的动词。动词和名词的代码并在一起x非语素字非语素字只是一个符号,字母x通常用于代表未知数、符号y语气词取汉字“语”的声母z状态词取汉字“状”的声母的前一个字母第17页,共66页。8.1 使用结巴分词提取用户评论关键字将关键字结果写入文件案例过程with open(user_comment_tags.txt,w+) as fn:

11、 # for tag,weight in tags_pairs: # fn.write(tag) # fn.write(:) # fn.write(str(weight) # fn.write(n) # 使用with方法新建一个文本对象,文件名为user_comment_tags.txt,打开模式是w+即写入模式(如果文件没有新建)第18页,共66页。8.1 使用结巴分词提取用户评论关键字将关键字结果写入文件案例过程第19页,共66页。8.1 使用结巴分词提取用户评论关键字展示Dataframe格式的评论信息分析用户评论关键字keywords_pd = pd.DataFrame(tags_pa

12、irs,columns=keyword,weight)print(keywords_pd.head()第20页,共66页。8.1 使用结巴分词提取用户评论关键字通过词云展示关键字分布分析用户评论关键字from pyecharts import options as optsfrom pyecharts.charts import WordCloudwc = WordCloud()wc.add(, list(i) for i in tags_pairs, word_size_range=15, 300)wc.set_global_opts(title_opts=opts.TitleOpts(ti

13、tle=词云关键字展示)wc.render_notebook()第21页,共66页。8.1 使用结巴分词提取用户评论关键字通过词云展示关键字分布分析用户评论关键字第22页,共66页。8.2 使用LDA主题模型做新闻主题分析主题模型的基本概念算法引言主题模型是一个能够挖掘语言背后隐含信息的利器,是语义挖掘、自然语言理解、文本解析和文本分析、信息检索的重要组成部分。它采用非监督式的学习方式,根据文档集中的每篇文档的词的概率分布做主题划分;在训练时不需要做数据标注,其工作机制类似于聚类算法第23页,共66页。8.2 使用LDA主题模型做新闻主题分析主题模型的应用场景算法引言主题模型可以应用到围绕主题

14、产生的应用场景中,例如搜索引擎领域、情感分析、舆情监控、个性化推荐、社交分析第24页,共66页。8.2 使用LDA主题模型做新闻主题分析主题模型的常用算法算法引言(1)潜在狄利克雷分配模型(Latent Dirichlet Allocation,LDA)。(2)概率潜在语义分析(ProbabilisticLatent Semantic Analysis,pLSA)。(3)其他基于LDA的衍生模型,如Twitter LDA,TimeUserLDA,ATM,Labeled-LDA,MaxEnt-LDA等。第25页,共66页。8.2 使用LDA主题模型做新闻主题分析案例背景描述案例背景本案例的背景是

15、基于目前获得的新闻内容数据,建立相应的主题模型,然后得到不同模型的主题特点,并通过对新文本的预测得到其可能的主题分类。第26页,共66页。8.2 使用LDA主题模型做新闻主题分析数据源通过爬虫获取,保存在news.csv中,每条数据记录都是一条新闻内容。如下是一条新闻记录(由于内容较多,中间内容用省略号代替):数据源概述昨天清晨,购得首张单程票卡的韩先生通过自动检票机。本报记者 周民 摄地铁进入自动售检票时代首张单程票卡由内蒙古乘客购得 今日4000引导人员“助刷”本报讯 昨天清晨5时01分,随着地铁西直门站的自动售票机临人力、财力等诸多方面的困难。(责任编辑:刘晓静)第27页,共66页。8.

16、2 使用LDA主题模型做新闻主题分析导入库案例过程import jieba.posseg as psegfrom gensim import corporafrom gensim.sklearn_api import LdaTransformer,TfIdfTransformer,Text2BowTransformerfrom sklearn.pipeline import Pipelinegensim中的corpora用于构建词库gensim.sklearn_api中的LdaTransformer、TfIdfTransformer、Text2BowTransformer分别用于LDA主题建模

17、、TF-IDF词频统计以及文本转词袋的构建第28页,共66页。8.2 使用LDA主题模型做新闻主题分析定义分词功能函数案例过程def word_split(text): # words = pseg.cut(text) # return word.word for word in words if word.flag = n # 仅保留名词词性结果第29页,共66页。8.2 使用LDA主题模型做新闻主题分析读取数据案例过程with open(news.csv,encoding=utf8) as fn: news_data = fn.readlines()print(news_data0:100

18、)第30页,共66页。8.2 使用LDA主题模型做新闻主题分析构建词库案例过程words_list = word_split(each_data) for each_data in news_data # dic = corpora.Dictionary(words_list) # 构建词库对于建模本身不是必须的,仅在最终展示每个主题内容时,需要将每个词的结果映射回去时才用到该部分内容第31页,共66页。8.2 使用LDA主题模型做新闻主题分析构建pipeline模型案例过程model_pipes = Pipeline(steps=(text2bow,Text2BowTransformer(t

19、okenizer=word_split), (tfidf,TfIdfTransformer(), (lda,LdaTransformer(num_topics=3, id2word=dic, random_state=3) # result = model_pipes.fit_transform(news_data) # (1)text2bow为生成词袋过程,使用Text2BowTransformer(tokenizer=word_split)实现,其中tokenizer指定为结巴分词方法。如果不设置则会使用默认的gensim.utils.tokenize()方法。(2)Tfidf为词频统计过

20、程,直接使用TfIdfTransformer()方法。第32页,共66页。8.2 使用LDA主题模型做新闻主题分析构建pipeline模型案例过程model_pipes = Pipeline(steps=(text2bow,Text2BowTransformer(tokenizer=word_split), (tfidf,TfIdfTransformer(), (lda,LdaTransformer(num_topics=3, id2word=dic, random_state=3) # result = model_pipes.fit_transform(news_data) # (3)Ld

21、a为主题建模,使用LdaTransformer(num_topics=3, id2word=dic, random_state=3)方法构建,其中num_topics=3指定最终话题类别数量为3;id2word=dic设置上一步构建的词库,用于还原关键字使用,若无分析需求可不必设置; random_state=3设置统一的随机值,避免多次计算的结果受到随机因素的影响。第33页,共66页。8.2 使用LDA主题模型做新闻主题分析用print(result)可打印每个数据记录所属的各个话题类别的概率分析主题结果print(result)第34页,共66页。8.2 使用LDA主题模型做新闻主题分析展

22、示每个类别的TOP关键字分析主题结果corpus = Text2BowTransformer(tokenizer=word_split).fit_transform(news_data) # corpus_tfidf = TfIdfTransformer().fit_transform(corpus) # topic_kw = model_pipes.steps21.gensim_model.top_topics(corpus_tfidf,topn=10) # LDA模型的gensim_model.top_topics方法,来获得最高的10个分布概率的关键字print(topic_kw) #

23、第35页,共66页。8.2 使用LDA主题模型做新闻主题分析展示每个类别的TOP关键字分析主题结果# 类别1(0.0013826446, 小区), (0.001379973, 女排), (0.00089395104, 世界), (0.00086274336, 编号), (0.0008516237, 时间), (0.00081707275, 大奖赛), (0.0007950419, 体育讯), (0.0007267941, 公司), (0.0007040468, 人), (0.000686727, 平), -5.885689820103438), # 类别2(0.0015513123, 图),

24、(0.0010907127, 时间), (0.0010224294, 体育讯), (0.0009499508, 小区), (0.00092686794, 编号), (0.0009198478, 精彩), (0.00081352255, 面积), (0.00080829725, 球员), (0.0007862203, 精彩图片), (0.00078179734, 人), -8.139738142311833), # 类别3(0.0013802531, 民族), (0.0010815584, 灾区), (0.0010510021, 人), (0.0009867399, 地震), (0.000890

25、58396, 男排), (0.0008505483, 时间), (0.0008157716, 传情), (0.0008147721, 记者), (0.0008002909, 魔鬼), (0.00079953944, 瞎说), -9.592828226511234)第36页,共66页。8.2 使用LDA主题模型做新闻主题分析如何分析不同的主题分析主题结果词的分布呈现“长尾分布”模式,所以要做“长尾分析”词的概率越高代表着其重要性越大,即越能说明该主题的话题倾向性。第37页,共66页。8.3 使用随机森林预测用户评分倾向文本分类的基本概念算法引言文本分类与传统结构化数据的分类应用,在流程上类似,都

26、需经过数据预处理、特征处理、分类建模、效果评估、新数据预测这几个阶段。差异点在于,数据预处理和特征处理时,由于不是结构化数据,因此处理方法、过程和应用库不同。第38页,共66页。8.3 使用随机森林预测用户评分倾向文本分类应用场景算法引言文本分类是自然语言处理和文本挖掘中的一个重要课题,比较常见的领域包括垃圾邮件识别、情感分类、文档(文本)类别划分、评分分级等。第39页,共66页。8.3 使用随机森林预测用户评分倾向文本分类的常用算法算法引言在大多数文本分类应用中,贝叶斯算法是最常用且最有效的算法之一本案例则使用随机森林来实现文本分类,原因是在结构化的分析过程中,随机森林都会表现出良好的模型稳

27、定性和一定的准确性,通常作为Benchmark模型使用,因此在文本分类中也可以尝试。第40页,共66页。8.3 使用随机森林预测用户评分倾向案例背景描述案例背景本案例则使用随机森林来实现文本分类,原因是在结构化的分析过程中,随机森林都会表现出良好的模型稳定性和一定的准确性,通常作为Benchmark模型使用,因此在文本分类中也可以尝试。第41页,共66页。8.3 使用随机森林预测用户评分倾向本案例的数据来自信息,数据文件包括三部分于爬虫:数据源概述一是book_comment.txt中的训练集,该训练集共241条件记录,包括评论文本和评分两列数据;二是stop_words.txt中的停用词列表

28、字典,该字典用于从分词中去除停用词;三是book_comment_new.txt中的要预测的数据集,仅包含评论文本本身。第42页,共66页。8.3 使用随机森林预测用户评分倾向导入库案例过程import jieba.posseg as psegimport pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizer from sklearn.pipeline import Pipelinefrom sklearn.ensemble import RandomForestClassifierfrom sklear

29、n.metrics import classification_reportsklearn.feature_extraction.text中的TfidfVectorizer用于使用TF-IDF方法计算词频并生成向量矩阵sklearn.metrics中的classification_report用于评估分类结果第43页,共66页。8.3 使用随机森林预测用户评分倾向sklearn.metrics中的classification_report用于评估分类结果案例过程def word_split(text): rule_words = ad, ag, an,a,i,j,l,v,vd,vg,vn wo

30、rds = pseg.cut(text) return word.word for word in words if word.flag in rule_words第44页,共66页。8.3 使用随机森林预测用户评分倾向读取数据案例过程raw_data = pd.read_csv(book_comment.txt,sep=t)print(raw_data.head(3)第45页,共66页。8.3 使用随机森林预测用户评分倾向读取停用词案例过程with open(stop_words.txt,encoding=utf8) as fn: stop_words = fn.readlines()停用词

31、本身代表了需要从分词结果中去除或需要过滤掉的元素第46页,共66页。8.3 使用随机森林预测用户评分倾向手动拆分训练集和测试集案例过程x,y = raw_data评论,raw_data得分 # num = int(len(x)*0.7) # x_train,x_test = x:num,xnum: # y_train, y_test = y:num,ynum: # 70%的训练集,30%的检验集第47页,共66页。8.3 使用随机森林预测用户评分倾向构建pipeline模型案例过程model_pipe = Pipeline(TfidfVectorizer,TfidfVectorizer(tok

32、enizer=word_split,stop_words=stop_words),(rf,RandomForestClassifier(class_weight =balanced)步骤一为由TfidfVectorizer构建的TF-IDF模型,它可直接基于原始文本,调用自定义的word_split分词器,结合自定义的停用词列表stop_words,在分词完成之后建立文本向量空间矩阵;步骤二为随机森林建立的集成模型,指定class_weight =balanced目的是让模型自己处理样本间不均衡的问题第48页,共66页。8.3 使用随机森林预测用户评分倾向训练模型案例过程model_pipe.

33、fit(x_train,y_train) # pre_y=model_pipe.predict(x_test) # 第49页,共66页。8.3 使用随机森林预测用户评分倾向模型评估案例过程columns = str(i) for i in model_pipe.classes_ # print(classification_report(y_test, pre_y,target_names=columns) # 第50页,共66页。8.3 使用随机森林预测用户评分倾向读取新的数据并预测预测新用户的评分with open(book_comment_new.txt,encoding=utf8) a

34、s fn: # data_new = fn.readlines() # pre_result = model_pipe.predict(data_new) # for each_str,each_pre in zip(data_new,pre_result): # print(feach_str each_pre.replace(n,) # 第51页,共66页。8.3 使用随机森林预测用户评分倾向读取新的数据并预测预测新用户的评分第52页,共66页。8.4 使用TextRank自动生成文章摘要和关键短语自动摘要的基本概念算法引言自动摘要就是从文章内容中找到能够代表整体含义的句子,它是一段简短的

35、描述信息。关键短语与关键字提取类似,但短语是关键字的组合,因此能代表更多的“词语”信息。第53页,共66页。8.4 使用TextRank自动生成文章摘要和关键短语提取自动摘要的两种思路和算法算法引言1. 抽取式抽取式即从文章内容中找到“现成”的具有最多信息的句子,然后将其作为摘要提取出来,所以这种方式本质上是一个将句子按信息重要性的“排序”的过程,由于实现简单,因此是目前使用范围最广的方法。Text rank是这一领域内的主要方法之一。第54页,共66页。8.4 使用TextRank自动生成文章摘要和关键短语提取自动摘要的两种思路和算法算法引言2. 概括法这种方式没有一个“现成”的句子可供使用

36、,而是要基于不同的单词组成可用的句子,然后将该句子表示为摘要信息,这种方法其实更接近于AI的工作方法,即可以从一堆信息中“抽取”并“归纳”信息。但其实现方式难度较高,且大多数情况下效果不太理想。Google Brain于2014年提出的Sequence-to-Sequence方案是该领域的典型代表。第55页,共66页。8.4 使用TextRank自动生成文章摘要和关键短语案例背景描述案例背景本案例的基本背景是:通过对文本内容的分析,使用TextRank自动生成文章摘要和关键短语。第56页,共66页。8.4 使用TextRank自动生成文章摘要和关键短语数据来自于本书的介绍信息,保存在文件text.txt中,部分信息预览如下。数据源概述Python作为数据工作领域的关键武器之一,具有开源、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论