基于Python的自然语言数据处理系统的设计与实现
打开文本图片集
摘要
随着云时代的来临,大数据技术将具有越来越重要的战略意义,很多组织通常都会用一种领域特定的计算语言,像Python、R和传统的MATLAB,将其用于对新的想法进行研究和原型构建,之后将其移植到某个使用其他语言编写大的系统中去,如Java、Python等语言慢慢经验的积累人们意识到,Python对于科研和产业两者都适用,这使得即thon变得流行起来,因为研究人员和技术人员使用同一种编程工具将会带来非常高的效益。本文基于Python语言通过对旅游游记的文本数据的处理分析,来预测大众游客的旅游趋势,并进行个性化推荐。这样工作有利于了解旅游网站的运行情况,分析游客的需求,以便更加有效地对网站和产品进行改进和升级。该工作涉及到数据采集、数据挖掘等关键技术。本文介绍一个基于Python的自然语言数据处理系统,系统通过对旅游游记文本数据进行探索,让人们能更加深入了解文本数据获取和处理的流程和一些实用方法技巧。
【关键词】Python自然语言数据处理系统设计
1自然语言数据处理系统的设计
自然语言数据处理是目前非常重要的一个科研和产业任务,自然语言处理被划分为3个阶段,分别是数据爬取,数据预处理和数据分析。本设计基于Python语言进行具体阐述得。因为,Python既是一门编程语言,又是一款十分好用的数据处理、统计分析与挖掘的软件框架。与其他编程语言相比Python具
有简单,易学习的特点,通过对Python的学习,能够快速开发统计分析程序。Python擁有丰富强大的扩展库和成熟的框架特性很好地满足了数据分析所需的基本要求。
1.1自然语言数据处理系统框架
本系统框架基于一般产业和科研的自然语言处理方法归纳总结而成,见图I。
1.2数据爬取
数据爬取任务通常是基于Robots协议进行,再分析网站DOM树爬取所需要的数据,在解析过程中主要使用正则表达式进行筛选和匹配,针对网站的反爬取机制采取一些措施和手段。
python 爬虫教学本系统基于Python的爬取了途牛网及马蜂窝的旅游游记数据包括元数据和文本型两种数据,共计3000余篇。其中元数据包括:文章标题,发表时间,浏览量和点赞等信息。文本型数据包括文字和游记图片数据。
1.3数据清洗
现有数据中,文本是最非结构化的形式,里面有各种各样的噪声;如果没有预处理,文本数据都不能分析。清理和标准化文本的整个过程就是文本预处理,其作用是使文本数据没有噪声并且可以分析。
移除噪声通用的做法是准备一个噪声实体的词典,在文本对象上逐个逐词迭代,消除在噪声词典中出现的标签。例如:处理掉文本中的停用词,需要用到停用词表,常见的停用词表可以在网上下载,再添加项目内容相关的停用词即可。
文本通过Python的jieba库进行中文分词,将每一篇游记精确分词并去除停用词,之后将分词后的结果每篇作为一行合并成预料文档,
1.4数据挖掘
数据挖掘方法需要将文本转换为数值进行计算,最简单的方法是基于词袋模型进行表示。再使用文档频率及逆文献频率(TF-IDF)进行计算。TF-IDF在不考虑文献中词的具体位置情况下,基于文献中出现的词汇将文本文献转化成向量模型。一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能够代表该文章。词频(TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。TF-IDF公式给出了文本集中术语的相对重要性,本文使用Python的scikit-learn模块实现了文本转换为TF-IDF向量计算。
首先使用在计算tf-idf词语权重将文档转换为词频矩阵,这样就做完了聚类之前的准备工作。再对游记数据通过KMeans实现聚类分析,KMeans算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,
直到簇心的移动距离小于某个给定的值。K 值的确定和聚类效果的评估是取得最优聚类结果的关键。k值可用手肘法获取,手肘法的核心指标是SSE(误差平方和),对每一个k值进行聚类并且记下对于的SSE,然后画出k 和SSE的关系图,最后选取肘部对应的k作为我们的最佳聚类数。聚类效果评估,通过对同一个k值进行多次聚类,画出聚类次数和intreia的折线图,intreia表示所有点到其分类中心点平均值的和,intreia值越小说明聚类效果越好。2自然语言数据处理系统的实现
2.1项目所使用Python库模块介绍
本问所述系统使用了requests、BeautifulSoup、Selenium、jieba、scikit-learn 及pylab库模块,下面简要介绍这些库模块:
(1)requests:requests是Python的一个HTTP客户端库,相比urllib更加简单易学。
(2)Beautiful Soup:Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库。Selenium:自动化工具库,Selenium支持各种浏览器驱动用于和PhantomJS 实现模拟浏览器,PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎。
(3)jieba:jieba是一个python实现的分词库,对中文有着很强大的分词能力。支持精确模式,全模式和搜索引擎模式三种分词模式。
(4)scikit-learn:Scikit-Learn是Python著名的机器学习库,其中包含大量机器学习算法、数据集,是数据挖掘方便的工具。安装它需要numpy、scipy、matplotlib一些依赖包支持。
(5)pylab:是marplotlib的一个子包,非常适合于进行交互式绘图。
2.2系统实现
基于自然语言处理框架,系统被划分为数据收集、数据预处理、数据分析三部分。如图2所示。
2.3数据收集
系统主要使用Python网络爬虫,通过geturlList函数获取当前页面url,getinList 函数下载一页的游记内容和图片将游记的一些元数据信息如标题,作者,发表日期等存入MySQL数据库表中,游记正文以文本形式单独存放。
系统为了提升爬取效率实现多进程和模拟浏览器,具体代码如下所示:
page=0#初始化页数
while page<4:#下载页数
url_list=[]
url_list=geturIList(driver.page source)
pool=Pool(5)#创建进程池
pool.map(getinList,url list)#传入进程函数名和url列表产生子进程
pool.closc()#关闭进程池
pool.join()#主进程阻塞
count=count+1#存储次数加1
print("\r当前进度{:.2f}%".fomiat(count*100/4),end="")#显示页数进度driver.find_element_by_xpath("//a[contains(text(),"下一页
")]").click()#模拟点击翻页
page=page+1#页数加1
time.sleep(4)#睡眠防止被封翻页等待时间
driver.quit()#关闭浏览器驱动
2.4数据预处理
本系统数据预处理包括中文分词、移除噪声筛选词性等操作。其中,segment函数移除噪声、分词,merge_file函数合并文档预料。
2.5数据分析
本系统数据分析采用了无监督的聚类方法,通过clu函数计算tf-idf、k-means聚类,其中计算tf-idf主要代码如下所示:
vectorizer=CountVectorizer()#将文本中的词语转换为词频矩阵
transformer=Tfidffransformer()#统计每个词语的tf-idf权值
tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))#计算tf-idf并将文本转为词频矩阵
_feature_names()#获取词袋模型中的所有词语
weight=tfidf toarray()#将tf-idf矩阵抽取出来
本系统的数据分析中需要人工根据经验值输入聚类个数,并选择聚类次数进行聚类。该方法更利于对不同文本聚类次数和准确度的控制,如图3所示。
聚类结果好坏,可以通过inertia值进行辅助判别,如图4所示。这样实现是由于初始中心点选择以及聚类数量的影响。一般无法直接获取最优的聚类结果。聚类结果存储到聚类结果表中,从而可以结合专家判断进行更深一步的知识探索。
3结论
通过对旅游数据的数据获取、清洗和分析表明Python语言能轻松胜任数据采集、预处理、数据挖掘等多项任务,用可视化的界面对分析的效果进行评估,本系统利用Python 语言强大的第三方库,用自然语言处理系统将高维数据降维,将数据的采集,处理一体化,节省了数据分析的时间,大大提高了工作效率,加强了我们对数据处理流程的整体把握。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论