运用SAS文本分析,海量资料秒分析

我们常常会因为会议笔记内容过多难以归整而发愁?会因为论文众多却无暇浏览而苦恼?会因为短时间内处理巨大数据而绝望?面对这些困扰,SAS北京研发中心分析产品开发部总监高燕女士运用SAS文本分析,通过两个实验快速有效分析IALP大会论文。我们看看她是如何做到的?

不久前,我参加了在台湾召开的2016年IALP大会(第20届亚洲语言处理国际会议)。 会议结束后,每位演讲嘉宾都收到一个U盘,里面包含了所有PDF格式的演讲论文。通常,整理归纳会议笔记和论文需要花费我几天或更长的时间完成。

然而这次,我决定试用一下SAS 文本分析(SAS Text Analytics),来帮助我更有效率地阅读论文:

实验一:生成一个所有论文的文字云

通过三个步骤生成一个所有论文的文字云,具体步骤如下:

 1、将PDF文档集转换为文本文件

利用SAS TGFilter程序和SAS文档转换服务器,可以将PDF文档批量转换为SAS数据集。

如果没有SAS文档转换服务器,你可以先免费下载Pdftotext。Pdftotext只能将PDF文件转换为文本文件,你需要编写SAS代码,将所有文本文件导入到数据集中。此外,如果使用Pdftotext,你还需要检查PDF文件是否被正确地转换。

逐个检查文本文件是很烦人的,所以我使用SAS TGFilter程序,该程序具有语言检测功能,任何因转换错误产生的垃圾文档经过检测后其对应的语言列将被标记为空值,而非“英语”。因此,通过检测语言列是否为“英语”,即可轻松地过滤掉所有垃圾文档。

2、将文档解析成单词并获取词频

对文档化的SAS数据集运行SAS程序HPTMINE或TGPARSE,打开词干选项并启用SAS发布的英语停用词列表,就可以获取所有词干在文档集里出现的频率。

    3、生成词汇云图

有了词频之后,就可以使用SAS可视化分析(SAS Visual Analytics)或使用R生成词汇云图。我喜欢编程,所以使用了SAS IML程序通过SAS提交R脚本。

这些步骤会生成一个词汇云,包含了66篇论文里最高频的500个词。原本总共有87篇论文,其中21篇因格式问题不能被SAS文档转换服务器正确转换。如果使用软件Pdftotext,会有19篇文章无法被正确转换。

图-1 66篇论文最高频的500个文字的文字云

从图1可以看出,最常用的前10个词是:词、语言、中文、模型、系统、句子、语料库、信息、特征和方法(word, language, chinese, model, system, sentence, corpus, information, feature and method)

IALP是一个国际会议,并不仅仅关注中文,不过在今年的会议上有一个挑战赛,其目的是预测繁体中文里情感词的情绪正负性以及情绪唤醒程度。此外,参加挑战赛的每个团队都被要求提交一篇论文来介绍自己的工作,所以“中文”在词汇云中出现的频率略高。

你可能觉得如果我们使用论文正文进行文字云分析,会有一些不妥,因此我又进行第二个实验。

实验二:生成论文摘要的文字云

通过类似实验一的步骤处理,生成论文摘要的文字云:

图-2 66篇论文摘要最高频的500个文字的文字云

从图2可以看出,论文摘要中最高频的10个词是:词、中文、系统、语言、方法、论文、建议、情感、基础和语料库(word, chinese, system, language, method, paper, propose, sentiment, base and corpus)。这些与从论文正文中提取的前10个高频词有些不同。

字、词和句子是自然语言的基本组成部分。对于NLP(自然语言处理)中的机器学习而言,标注的语料库则是关键。没有语料库,就不能建立任何模型。然而,即使在大数据时代,标注的语料库也非常稀缺,这就是为什么这么多研究人员在语料标注上投入大量工作的原因。

我们可以用SAS进行更多的分析吗?当然。我们可以分析关键字、参考文献、论文影响力、论文分类等。我争取尝试更多这类有趣的分析,并在将来与大家分享更多成果。

生成文字云的SAS脚本:

* Step 1: Convert PDF collections into sas dataset;

* NOTE: You should have SAS Document Converte purchased;

proc tgfilter out=paper(where=(text ne ” and language eq ‘English’))

tgservice=(hostname=”yourhost” port=yourport)

srcdir=”D:\temp\pdf_collections”

language=”english”

numchars=32000

extlist=”pdf”

force;

run;quit;

* Step 2: Parse documents into words and get word frequencies;

* Add document id for each document;

data paper;

set paper;

document_id = _n_;

run;

proc hptmine data=paper;

doc_id document_id;

var text;

parse notagging nonoungroups termwgt=none cellwgt=none

stop=sashelp.engstop

outparent=parent

outterms=key

reducef=1;

run;quit;

* Get stem freq data;

proc sql noprint;

create table paper_stem_freq as

select term as word, freq as freq

from key

where missing(parent) eq 1

order by freq descending;

quit;

* Step 3: Generate word cloud plot with R;

data topstems;

set paper_stem_freq(obs=500);

run;

proc iml;

call ExportDataSetToR(“topstems”, “d” );

submit / R;

library(wordcloud)

# sort by frequency

d <- d[order(d$freq, decreasing = T), ]

# print wordcloud:

svg(filename=”d://temp//wordcloud_top_sas.svg”, width=8, height=8)

wordcloud(d$word, d$freq)

dev.off()

endsubmit;

run;quit;

本文作者:高燕,从事SAS相关的开发工作近十五年,目前担任SAS北京研发中心分析产品开发部总监,负责企业决策管理和文本分析两大产品线的研发工作。希望能将SAS文本分析和SAS强大的机器学习通过对真实数据的分析,全方位地展示给大家。

【关于SAS】

SAS是数据分析领域的领导者。通过提供创新的分析、商业智能和数据管理软件与服务,SAS帮助全球超过80,000家用户更好、更快地进行决策。自1976年以来,SAS一直向全球客户提供知的力量(THE POWER TO KNOW®)。

分享到:更多 ()

抢沙发

评论前必须登录!