基于Python的自然语言数据处理系统的设计与实现

2018-02-26 09:45唐琳何天宇
电子技术与软件工程 2018年16期

唐琳 何天宇

摘要

随着云时代的来临,大数据技术将具有越来越重要的战略意义,很多组织通常都会用一种领域特定的计算语言,像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的爬取了途牛网及马蜂窝的旅游游记数据包括元数据和文本型两种数据,共计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并将文本转为词频矩阵

word=vectorizer.get_feature_names()#获取词袋模型中的所有词语

weight=tfidf toarray()#将tf-idf矩阵抽取出来

本系统的数据分析中需要人工根据经验值输入聚类个数,并选择聚类次数进行聚类。该方法更利于对不同文本聚类次数和准确度的控制,如图3所示。

聚类结果好坏,可以通过inertia值进行辅助判别,如图4所示。这样实现是由于初始中心点选择以及聚类数量的影响。一般无法直接获取最优的聚类结果。聚类结果存储到聚类结果表中,从而可以结合专家判断进行更深一步的知识探索。

3 结论

通过对旅游数据的数据获取、清洗和分析表明Python语言能轻松胜任数据采集、预处理、数据挖掘等多项任务,用可视化的界面对分析的效果进行评估,本系统利用Python语言强大的第三方库,用自然语言处理系统将高维数据降维,将数据的采集,处理一体化,节省了数据分析的时间,大大提高了工作效率,加强了我们对数据处理流程的整体把握。

(通讯作者:唐琳)

参考文献

[1]唐琳,张应博.应用型本科软件工程专业转型试点框架设计[J].计算机教育,2017(11):78-81.

[2]丘文峰.基于Python的医学图像处理框架及其应用[D].华南师范大学,2010..

[3]丁杰.基于文法规则匹配的自然语言处理系统研究与实现[J].电脑知识与技术,2009,5(04):833-834.

[4]杨洋.基于网络爬虫的学术文献检索管理系统的研究和实现[D].中国科学院大学,2014.

[5]楊洋,李晓风,赵赫等.基于网络爬虫的文献检索系统的研究和实现[J].计算机技术与发展,2014(11):35-38.

[6]唐琳,李天俐,何天宇.校企合作下面向企业项目教学法的设计与实践[J].科技资讯,2017,15(27).

[7]唐琳.面向企业项目教学法的Python 1s序设计教学研究[J].黑龙江教育(高教研究与评估),2018(04):3-4.