我们是MJ
代码我们在Jupyter Notebook中新建一个Python 2笔记本,起名为topic-model。为了处理表格数据,我们依然使用数据框工具Pandas。先调用它。import pandas as pd然后读入我们的数据文件,注意它的编码是中文GB18030,不是Pandas默认设置的编码,所以此处需要显式指定编码类型,以免出现乱码错误。df = ("", encoding='gb18030')我们来看看数据框的头几行,以确认读取是否正确。()显示结果如下:没问题,头几行内容所有列都正确读入,文字显式正常。我们看看数据框的长度,以确认数据是否读取完整。执行的结果为:(1024, 3)行列数都与我们爬取到的数量一致,通过。下面我们需要做一件重要工作——分词。这是因为我们需要提取每篇文章的关键词。而中文本身并不使用空格在单词间划分。我们首先调用jieba分词包。import jieba我们此次需要处理的,不是单一文本数据,而是1000多条文本数据,因此我们需要把这项工作并行化。这就需要首先编写一个函数,处理单一文本的分词。def chinese_word_cut(mytext):return " ".join((mytext))有了这个函数之后,我们就可以不断调用它来批量处理数据框里面的全部文本(正文)信息了。你当然可以自己写个循环来做这项工作。下面这一段代码执行起来,可能需要一小段时间。请耐心等候。df["content_cutted"] = (chinese_word_cut)执行过程中可能会出现如下提示。没关系,忽略就好。Building prefix dict from the default dictionary ...Loading model from cache /var/folders/8s/k8yr4zy52q1dh107gjx280mw0000gn/T/ model cost dict has been built succesfully.执行完毕之后,我们需要查看一下,文本是否已经被正确分词。()
一碗小泡饭
目的 各大电商竞争越来激烈,为了提升客户服务质量,除了打价格战外,了解客户的需求点,对消费者的文本评论进行数据挖掘,倾听客户的心声越来越重要。 工具 1、贝壳采集器 2、Google浏览器 3、 + Pycharm 数据采集 ①本文对京东平台的手机进行爬虫,首先进入京东商城,选择一款手机,这里以华为Mate 30 Pro 5G为例 ②在采集平台输入网址,点击贝壳采集开始配置信息 ③因为是采集评论所以还需要进行下预操作配置切换页面:点击预操作按钮-->添加点击元素按钮-->左键点击流程图中添加元素按钮(悬浮显示操作键)-->点击悬浮显示操作键<选择按钮> -->点击网页商品评论TAB页切换按钮 -->点击保存④没有识别出评论信息,手工操作下:清空字段-->更改页面类型为手工识别列表 --> 选中两个一样元素(这里两个用户名称) -->下一页未自动识别成功-->更改分页类型为手动点击下一页-->配置完成-->开始采集 数据预处理 当我们通过爬虫获取到我们想要的数据之后,进行简单的观察,可以发现评论的一些特点: 文本短,基本上大量的评论就是一句话. 情感倾向明显:明显的词汇如”好” “可以” 语言不规范:会出现一些网络用词,符号,数字等 重复性大:一句话出现词语重复 数据量大. 故我们需要对这些数据进行数据预处理 数据预处理包括:去重、分词等 下面我们将进行数据清洗 import jieba#评论内容进行去重 def quchong(infile, outfile): infopen = open(infile, 'r', encoding='utf-8') outopen = open(outfile, 'w', encoding='utf-8') lines = () list_1 = [] for line in lines: if line not in list_1: (line) (line) () ()quchong("E:/comments/华为", "E:/comments/P30去重.txt")# ('') #创建停用词list def stopwordslist(filepath): stopwords = [() for line in open(filepath, 'r', encoding='utf-8').readlines()] return stopwords#对评论内容进行分词 def seg_sentence(sentence): sentence_seged = (()) stopwords = stopwordslist('') #这里加载停用词的路径 outstr = '' for word in sentence_seged: if word not in stopwords: if word != '\t': outstr += word outstr += " " return outstrinputs = open('E:/comments/P30去重.txt', 'r', encoding='utf-8') outputs = open('E:/comments/P30分词.txt', 'w') for line in inputs: line_seg = seg_sentence(line) #这里的返回值是字符串 (line_seg + '\n') () () print('分词完毕') 数据分析 上面我们已经通过去重和jieba分词将爬取的内容进行了预处理,接下来就开始对处理过的数据进行分析,包括词频统计、关键词提取以及词云的生成等 #词频统计 import from collections import Counter #词频统计with open('E:/comments/P30分词.txt', 'r', encoding='utf-8') as fr: data = (()) data = dict(Counter(data))with open('E:/comments/P30词频.txt', 'w', encoding='utf-8') as fw: # 读入存储wordcount的文件路径 for k, v in (): ('%s, %d\n' % (k, v)) import import as plt from wordcloud import WordCloud#生成词云 with open('E:/comments/P30词频.txt') as f: #提取关键词 data = () keyword = (data, topK=50, withWeight=False) wl = " ".join(keyword)#设置词云 wc = WordCloud( #设置背景颜色 background_color = "white", #设置最大显示的词云数 max_words=2000, #这种字体都在电脑字体中,一般路径 font_path='C:/Windows/Fonts/', height=1200, width=1600, #设置字体最大值 max_font_size=100, #设置有多少种随机生成状态,即有多少种配色方案 random_state=30, )myword = (wl) #生成词云 #展示词云图 (myword) ("off") () ('E:/comments/') #把词云保存下
洋葱没有心77
许多数据分析应用都会涉及到从短文本中提取出潜在的主题,比如微博、短信、日志文件或者评论数据。一方面,提取出潜在的主题有助于下一步的分析,比如情感评分或者文本分类模型。另一方面,短文本数据存在一定的特殊性,我们无法直接用传统的主题模型算法来处理它。短文本数据的主要难点在于: 主题提取模型通常包含多个流程,比如文本预处理、文本向量化、主题挖掘和主题表示过程。每个流程中都有多种处理方法,不同的组合方法将会产生不同的建模结果。 本文将主要从实际操作的角度来介绍不同的短文本主题建模算法的优缺点,更多理论上的探讨可以参考以下文章。 下文中我将自己创建一个数据集,并利用 Python scikit-learn 来拟合相应的主题模型。 本文主要介绍三个主题模型, LDA(Latent Dirichlet Allocation), NMF(Non-Negative Matrix Factorization)和SVD(Singular Value Decomposition)。本文主要采用 scikit-learn 来实现这三个模型。 除了这三个模型外,还有其他一些模型也可以用来发现文档的结构。其中最重要的一个模型就是 KMeans 聚类模型,本文将对比 KMeans 聚类模型和其他主题模型的拟合效果。 首先,我们需要构建文本数据集。本文将以四个自己构建的文本数据集为例来构建主题模型: 首先,我们需要考虑下如何评估一个主题模型建模效果的好坏程度。多数情况下,每个主题中的关键词有以下两个特征: 一些研究表明:关键词还需具备以下两个特征: 接下来,我们将介绍如何实现上述的四个模型——NMF, SVD, LDA 和 KMEANS。对于每个主题模型,我们将分别采用两种文本向量化的方法—— TF(Term Frequence) 和 TFIDF(Term-frequence-inverse-document-frequence)。通常情况下,如果你的数据集中有许多词语在多篇文档中都频繁出现,那么你应该选择采用 TFIDF 的向量化方法。此时这些频繁出现的词语将被视为噪声数据,这些数据会影响模型的拟合效果。然而对于短文本数据而言,TF和TFIDF方法并没有显著的区别,因为短文本数据集中很难碰到上述情况。如何将文本数据向量化是个非常热门的研究领域,比如 基于word embedding模型的方法——word2vec和doc2vec。 主题模型将选择主题词语分布中频率最高的词语作为该主题的关键词,但是对于 SVD 和 KMEANS 算法来说,模型得到的主题词语矩阵中既包含正向值也包含负向值,我们很难直接从中准确地提取出主题关键词。为了解决这个问题,我选择从中挑出绝对数值最大的几个词语作为关键词,并且根据正负值的情况加上相应的标签,即对负向词语加上 "^" 的前缀,比如"^bergers"。 sklearn 中的 truncated SVD implementation 类似于主成分分析算法,它们都试图利用正交分解的方法选择出具有最大方差的变量信息。 对于 clearcut-topic 数据集来说,我们分别利用 TF 和 TFIDF方法来向量化文本数据,并构建 SVD 模型,模型的拟合结果如下所示。正如我们之前所提到的,SVD 模型所提取的关键词中包含正负向词语。为了简单起见, 我们可以理解为该主题包含正向词语,不包含负向的词语。 比如,对于 "Topic 1: bergers | ^hate | love | ^sandwiches" 来说,该文本的主题中包含 "love bergers" 但是不包含 "hate sandwiches"。 由于模型的随机效应,所以每次运行模型得到的结果都会存在细微的差异。在 SVD 的拟合结果中我们发现发现 Topic 3: bergers | ^hate | ^love | sandwiches 成功地提取了 “food” 的主题。当我们在解释 SVD 模拟的拟合结果时,我们需要对比多个主题的信息。比如上述的模型拟合结果可以解释成:数据集中文档的主要差异是文档中包含 “love bergers” 但不包含 “hate sandwiches”。 接下来我们将利用 SVD 来拟合 unbalanced topic 数据集,检验该模型处理非平衡数据集的效果。 从下述结果中可以看出,SVD无法处理噪声数据,即无法从中提取出主题信息。 LDA 是最常用的主题提取模型之一,因为该模型能够处理多种类型的文本数据,而且模拟的拟合效果非常易于解释。 直观上来看,LDA 根据不同文档中词语的共现频率来提取文本中潜在的主题信息。另一方面,具有相同主题结构的文本之间往往非常相似,因此我们可以根据潜在的主题空间来推断词语之间的相似性和文档之间的相似性。 LDA 算法中主要有两类参数: 接下来我们将研究这些参数是如何影响 LDA 模型的计算过程,人们更多的是根据经验来选择最佳参数。 与 SVD 模型不同的是,LDA 模型所提取的主题非常好解释。以 clearcut-topics 数据集为例,LDA 模型中每个主题都有明确的关键词,它和SVD主要有以下两个区别: 此外,对 LDA 模型来说,采用不同的文本向量化方法也会得到不同的结果。 在 sklearn 中,参数 topic_word_prior 和 doc_topic_prior 分别用来控制 LDA 模型的两类参数。 其中 topic_word_prior 的默认值是(1/n_topics),这意味着主题中的每个词语服从均匀分布。NMF 可以视为 LDA模型的特例,从理论上来说,这两个模型之间的联系非常复杂。但是在实际应用中,NMF 经常被视为参数固定且可以获得稀疏解的 LDA 模型。虽然 NMF 模型的灵活性不如 LDA 模型,但是该模型可以很好地处理短文本数据集。 另一方面,NMF 最大的缺点是拟合结果的不一致——当我们设置过大的主题个数时,NMF 拟合的结果非常糟糕。相比之下,LDA模型的拟合结果更为稳健。 首先我们来看下 NMF 模型不一致的拟合结果。对于 clearcut topics 数据集来说,当我们设置提取5个主题时,其结果和真实结果非常相似:类似于 KMeans 模型的聚类方法能够根据文档的向量形式对其进行分组。然而这个模型无法看成是主题模型,因为我们很难解释聚类结果中的关键词信息。 但是如果结合 TF或TFIDF方法,我们可以将 KMeans 模型的聚类中心视为一堆词语的概率组合:最后,我将简单比较下不同的主题提取模型。大多数情况下,我们倾向于根据文档的主题分布情况对其进行分组,并根据关键词的分布情况来提取主题的信息。 大多数研究者都认为词语的语义信息是由其上下文信息所决定的,比如 “love” 和 “hate”可以看成是语义相似的词语,因为这两个词都可以用在 “I _ apples” 的语境中。事实上,词向量最重要的一个研究就是如何构建词语、短语或者文档的向量形式,使得新的向量空间中仍然保留着语义信息。 找寻语义相同的词语不同于计算词语的共现频率。从下述的结果中可以看出,大多数主题提取模型只涉及到词语的共现频率,并没有考虑词语的语义信息,只有 SVD 模型简单涉及到语义信息。 需要注意的是,本文所采用的数据集是根据一定的规则随机生成的,所以下述结果更多的是用于说明不同模型之间的区别:原文链接: 译者:Fibears
在引用里面选择目录,把设置弄好之后,自动编制目录。提示:要想有好看的目录,那么提前把文件中各段的格式设置好是前提。步骤一、自动生成目录准备:大概索引1、要想让w
在学习和工作中,大家一定都接触过论文吧,通过论文写作可以培养我们独立思考和创新的能力。那么你知道一篇好的论文该怎么写吗?下面是我为大家整理的本科毕业论文老师评语
在我国社会主义市场经济提倡大生产大市场大消费,并建立与之相适应的现代物流的同时,创建我国的现代绿色物流,提倡高效节能,绿色环保,不仅是必要的,也是迫切的。随着经
代码我们在Jupyter Notebook中新建一个Python 2笔记本,起名为topic-model。为了处理表格数据,我们依然使用数据框工具Pandas。
我不知道,我不会写,你看别人的叭