文摘
在过去的几年,大数据分析已经成为一个流行的手段,利用多个(最初价值)源找到相关知识真正的域。然而,大量的大数据来源提供文本非结构化数据。一个适当的分析工具需要能够充分结合大数据和text-analysing技术。记住这一点,我们结合流水线框架(BDP4J (Java)大数据流水线)与一组文本预处理的实现技术,以创建NLPA(自然语言预处理体系结构),一个可扩展的开源插件实现预处理步骤,可以很容易地创建一个管道。此外,NLPA包含生成的数据集的可能性使用经典的基于符号表示数据或更新synset-based将进一步处理的数据集使用语义信息(即。,使用本体)。这项工作提出了一个案例研究NLPA操作覆盖原始异构大数据的变换成不同的数据集表示它和令牌)和使用Weka应用程序编程接口(API)来启动两个著名的分类器。
1。介绍和动机
达成的技术的进步在过去十年已促使信息技术产业重要的改进,如社交网络的出现,物联网、云计算。这些新技术,以及数据存储和计算能力的增强,激发了大量的异构数据的连续代(结构化和非结构化)以前所未有的速度。这种情况的一个明显的例子是最新的Statista报告所示(1]估计一个指数数据增长趋势在世界上,在2025年将达到175 ZB(代表对2018)增长了530%。然而,海量的原始数据是有意义和有用的在生活的任何方面(人、企业、研究成果等)。大数据已经成为一个新的范式分析和实时从原始数据中提取有价值的信息通过数据挖掘任务通过使用并行编程方案在大型计算机集群(2]。这个场景使大数据基本范式各领域提升竞争力的知识(商业、科学、政府、医疗、等等)。
挖掘大量的原始数据使得伟大的改进在不同领域3,4]。所有这些领域的优势达到了使用大数据和大数据分析,会导致经济效益的最新报告预测将由2027美元103 b (5]。然而,尽管这个积极的场景中,平均只有30%到40%的现有的原始数据进行了分析(6]。
大数据的竞争优势范式的连续创造了多个工具和基于云的服务能够处理,管理和解释数据提供有意义的信息。此外,指数增长近年来的社会媒体用户和互连设备,不断实时共享信息促使需要进行大数据分析和决策过程在最短的时间内(7]。因此,最初的批处理模式处理技术用于处理大数据正在变得过时和效率低下的主要原因是他们无法实时流媒体资源。
在过去的几年中,新的改进解决方案基于管道概念出现的针对性解决这种情况下(8,9]。数据管道的概念是基于分段一项复杂的任务分成几个简单的和相互联系的子任务(命名管道),一个子任务的输出成为下一个的输入(10]。自从这个分治模式出现在大数据领域,多个云计算管道框架已经开发的重要公司执行数据分析和处理服务(11]。
然而,需要执行并将数据存储在外部服务和基础设施(由第三方管理企业)让几家企业对私有数据混合的可能性感到不安与其他组织(12,13]。此外,由于云基础设施是完全拥有,管理和监控的服务提供者,它让顾客难以控制的水平,他们想要在他们的后端基础设施13,14]。这些缺点动机大中型企业逐步迁移到云计算服务的专有解决方案设计和实现自己的objective-specific管道工具。与此同时,为了给社区带来自由选择,多种离线领域特定的大数据管道工具出现的研究和学术环境15]。这个场景使广泛的创造、开发和使用许多大面向数据的技术专注于从大量的提取相关信息(主要是nonstructured)信息。
这种情况下促使文本分析模型的外观。这个概念是相结合的结果大面向数据的技术在大量nonstructured数据源(如微博、博客和wiki)和人工智能(AI)的方法来分析和提取未知信息(16]。为了成功地应用人工智能的方法来提取有价值的信息,原始文本应该运用文本预处理技术变成特性(通常表示为列)和实例(表示为行)。预处理方法包括选择、组合和执行不同的预处理任务能够变换原始输入数据收集来自多个异类源文本的功能齐全的数据集。
文本分析已广泛应用在工业和研究人员(17,18),因为它可以帮助决策者理解的行为不稳定域(突然发生变化)。尽管有前景的结果通过发表作品使用文本分析模型,我们发现一个重要的限制对于扩展的使用基于预处理技术。文本分析模型是基于使用统计方法和正则表达式提取和检测最重要的特性从文本内容。这些(口令)方法和表达式可能会担任一个适当的计算资源消耗和性能之间的妥协在1990年代,当计算功能和技术是相当有限的。然而,技术进步取得了在过去十年在信息科学领域允许新方法的开发和部署集中检测和提取概念根据语义关系(synset-based表示)。尽管这些新方法取得更好的性能结果比基于符号的方法(19- - - - - -22),他们的应用程序在大数据领域并不常见。此外,domain-dependant性质的文本分析过程中涉及的各个阶段(信息提取和文本挖掘)(16]复杂化发展的通用文本分析框架。为了减轻这些问题,我们开发了NLPA, Java pipeline-based工具能够从多个数据源中提取特征通过一个灵活的组合的任务。默认情况下,NLPA使提取的令牌的口令(使用方法)和同义词集(使用基于语义的方法)。然而,为了适应用户需求,它还允许一个简单的设计、开发和部署新功能(任务)。NLPA已经发展了BDP4J (Java流水线框架处理大数据)由于其性能、灵活性和高度可定制的功能(23]。
我们工作的其他结构如下。部分2介绍几个著名的NLP Java框架中使用大数据项目和它们的局限性。部分3NLPA介绍,包括一个简短的描述关于其支持的文本挖掘任务及其与BDP4J交互框架。部分4包括一个案例研究显示NLPA的使用。部分5概述了教训NLPA的开发过程中实现的。最后,部分6总结了主要结论,突出了未来的工作。
2。国家的艺术
而文本分析被成功地应用于探索文本从不同的领域,各种各样的工具(他们中的大多数分布式开源)出现,成为流行。这些工具已经开发在各种各样的编程语言(包括Java、Python和R)。尽管新的编程语言的使用(如Python、Golang或R)正在增加在世界范围内,Java开发和开发人员的数量明显大于其他语言(24]。出于这个原因,本研究编制以下工具中实现Java: (i)锤(25),(2)门(26斯坦福CoreNLP [], (3)27),(iv) OpenNLP [28),(v) UIMA [29日),(vi) DKPro-Core [30.)和一项研究由IXA NLP执行组使用Apache风暴框架用于文本分析(31日]。
锤(机器学习语言工具箱)是用于执行机器学习/文本数据。具体地说,它是一个集成的Java代码执行统计自然语言处理,文档分类、信息提取、聚类,或主题造型。锤实现了一个灵活的管道系统,处理不同的任务,比如分词的字符串,删除stopwords,和序列转换成向量。
门(总体架构文本工程)是一个开源软件工具包用于文本分析和处理。它允许文本处理成为一个综合任务,结合软件开发人员、语言工程师和研究人员从不同的领域。门组件三种类型之一:(i) LanguageResources(词汇、语料库、本体等),(2)ProcessingResources(解析器、发电机、ngram建模人员、记号赋予器,POS薄铁片,句子分配器,地名,orthomatcher,指称相同,等等),和(3)VisualResources(可视化和编辑组件参与gui)。它支持多种格式(如纯文本、HTML、SGML、XML、RTF、电子邮件、和PDF),提供了易于使用的和可扩展的设施用于文本注释(本体),促进语言的持久存储资源,实现多语言数据处理和NLP的方法。
斯坦福CoreNLP提供了一组人类语言技术工具。它集成了斯坦福大学的许多NLP工具,包括POS薄铁片,命名实体识别器(尼珥)解析器,该算法解决系统,情绪分析,引导模式学习,开放信息提取工具。此外,斯坦福CoreNLP为任意文本提供了一个健壮的注释器支持广泛的(人类)的语言,它可以从命令行通过使用原始的Java编程API,面向对象的简单的API,第三方API大多数现代编程语言,或者一个web服务。它支持Linux, macOS和Windows操作系统平台。
Apache OpenNLP库实现了机器学习的方法来处理自然语言。它支持最常见的NLP的任务,如断词,句子分割、POS标签,命名实体提取、分割、解析、语言检测,指称相同分辨率。这些功能是结构化的方式执行其中一个能让其他可用作进一步处理。此外,它支持train-test评估基准不同的配置。这些设施都可以通过API或通过使用命令行界面提供编程实验协议定义的。
UIMA(非结构化信息管理应用程序)设计软件应用程序来分析大量的非结构化的信息(例如,文本、音频和视频)发现相关知识。UIMA允许将应用程序分解为组件,提供了一个大的组件列表分析非结构化信息,比如空格分词器雪球,正则表达式,字典,可配置特性提取器。每个UIMA组件开发了实现框架定义的接口,并提供自描述元数据通过XML描述符文件。该框架实现它们之间的信息交换机制(即。数据流)及其管理。
DKPro-Core(达姆施塔特知识处理核心)是一种软件组件库实现自然语言处理(NLP)任务。它是基于Apache UIMA框架和集成了许多先进的NLP工具(即。uimaFIT组件),允许他们的组合来构建一个实验管道。DKPro-Core主要集中在语言的执行预处理任务(如词性涂画者,解析器,等等)。
之后的使用大数据为文本分析方法,Agerri et al。31日)设计和测试文本处理大数据流方法。他们利用Apache风暴框架设计风暴螺栓执行NLPA操作在一个分布式架构。他们开发了五个文本处理操作(分词、词类、尼珥,选区的解析,并指称相同分辨率)和做了一些实验分析的评价主要集中在吞吐量。
基于这些框架的一般操作,我们找到适当的使用大数据处理文本的分析方法(结构化数据)。此外,我们发现这些框架没有提供一些有趣的功能(如创建文本的语义表征或多个信息数据源的处理)。考虑这些以前作品的贡献与我们的想法,我们开发了NLPA,提供下列附加功能:(i)使用新的基于语义(synset)表示;(2)处理不同来源的信息(网站、微博、电子邮件、消息等);和(iii)正确配置和执行许多低级文本预处理步骤完成每个具体用户的要求,消除url或缩写等处理。下一节介绍NLPA和细节的操作可以组合预处理文本语料库。
3所示。引入NLPA
如前所述,为了执行文本分析,大数据应该转换为全功能的数据集可以使用人工智能技术进行处理。自定义和执行这个转换NLPA提供的主要功能。为此,NLPA包含一系列预处理任务实现用Java编写的,可以使用的插件BDP4J框架。这些任务定义使用同义词集和/或令牌来实现高效加工的信息交换通过不同的协议和网络服务。NLPA提供超过30预处理任务适用全集包含电子邮件(RFC 5322 (32])、网站(Web存档,WARC)、推特、YouTube评论,SMS(短消息服务),或纯文本。这些文件类型的识别是由使用文件扩展名(.eml、.warc .twtid、.ytbid .tsms和. txt)。鉴于BDP4J框架的体系结构,应用于这些预处理任务org.bdp4j.types.Instance对象(参见图1)。
如图1实例类汇集了四个属性:(i)来源,(2)名称,(iii)的数据,(iv)的目标,(v)道具。在细节,源属性存储信息需要访问信息的来源(通常是一个编译java.io.File就够了)。的的名字属性代表了任何形式的一个实例的唯一标识。实例的处理意味着一系列的修改数据属性(最初与相同的值源应用属性),而预处理任务。从逻辑上讲,修改的数据属性意味着从原始数据信息丢失,不可能回到原来的状态数据(可以是实现源属性)。此外,目标属性是用于解决分类和预测问题中包含实例信息真正的预测/分类。最后,道具属性包含若干属性计算通过预处理任务(如语言和文本长度)。
NLPA预处理任务包括五个输入类型数据属性:java.io.File,java.lang.StringBuffer,org.nlpa.types.SynsetSequence,org.nlpa.types.TokenSequence,org.nlpa.types.FeatureVector。表1编译的输入和输出数据类型数据所有任务的属性包括在我们的框架。
如表所示1,大多数任务都使用而设计的java.lang.StringBuffer(一个可变的字符串表示)作为输入数据。一些有用的操作,如处理缩写、俚语、感叹词,stopwords, url,用户和引用,是由这个表示。
接下来的部分描述的任务由我们的框架,实现分类所需的数据类型数据正在处理属性的实例。此外,对于每一个任务,我们将提供使用的一个例子。
3.1。处理io。文件数据类型
虽然流可以很容易地用于NLPA来源,目前使用本地存储的文件(即。在一个本地或网络文件系统)代表通过java.io.File对象读取数据实例的主要手段。每个可用的任务处理实例包含的描述java.io.File对象作为数据包括以下。对于每个任务,我们也包括更改以下实例在JSON (JavaScript对象表示法):{道具:{},名字:“1”,数据:“_spam_ /交货。tsm”,来源:“_spam_ /交货。tsm”目标:零}。在这个例子中,源和数据属性的实例java。io。文件(但表示为字符串),而的名字真的是一个字符串对象。
File2StringBufferPipe能够改变吗数据属性的实例java.io.File到一个java.lang.StringBuffer类型。出于这个原因,目标文件的文本内容(仅支持的格式)存储在数据属性。这个任务所做的修改的例子是{数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们的< a href = \”http://www.xx.com\ " > < / >,# xx或@xx”}。在执行这个任务后,数据属性的一个实例java。朗。StringBuffer。
GuessDateFromFilePipe是能够找到的日期输入文件的内容(如果可用)(解释他们的格式)。由于这一过程中,每个实例的日期是存储为一个属性(使用“日期”默认名称)。使用此任务,属性道具提供的实例作为一个例子转换如下{道具:{“日期”:零}}。只要tsm(SMS文本消息)不包含消息的日期,格式日期产权满是null。
StoreFileExtensionPipe创建一个属性插入内容的类型实例属性(使用“扩展”作为默认的名字)。属性的值计算的扩展文件的引用数据实例的属性。使用此任务,道具属性的例子是改变如下{道具:{“扩展”:“.tsms}}。
最后,TargetAssigningFromPathPipe只可以应用分类的目的。这个任务搜索引用的文件的路径数据实例找到文件夹的属性匹配的类。该任务使用一个转换图来连接系统文件夹名称和类别实例。通过使用这个任务,目标属性输入的例子是改变如下{目标:“垃圾邮件”}。
一次java.io.File被处理成java.lang.StringBuffer(即。,using File2StringBufferPipe task), a wide variety of operations can be used to preprocess the text. The next subsection presents the tasks that can be used for the processingStringBuffer对象作为一个数据实例。
3.2。处理io。StringBufferData Type
StringBuffer类是用来表示和修改文本内容(由可变属性提供的StringBufferJava类)。一旦提取文本,提供各种各样的任务转换输入内容,将部分(stopwords感叹词,表情符号等)和/或替换文本(俚语形式、缩写等)。描述可用的任务处理这种类型的数据(按字母顺序命令)提供以下。在本节,我们将使用以下实例作为一个例子:{道具:{},名字:“1”,数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们在< a href = " http://www.xx.com " > < / >, # xx或@xx”,来源:“_spam_ /交货。tsm”目标:零}。
AbbreviationFromStringBufferPipe检测缩写词在文本和扩大使用字典。缩写字典实现几个语言(如英语、西班牙语、法语、或俄罗斯)使用JSON文件。为了正确地选择正确的缩略语词典,一个属性存储文本的语言应该(见先前存在GuessLanguageFromStringBufferPipe)。由于预处理与管道的例子(StripHTMLFromStringBufferPipe|GuessLanguageFromStringBufferPipe|AbbreviationFromStringBufferPipe),以下修改(道具和数据属性)是由{道具:{“语言”:“EN”、“language-reliability”:“0.9”},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日,访问我们# xx或@xx”}。
ComputePolarityFromStringBufferPipe添加文本的极性为实例属性。可能的结果的形式5级李克特量表(即。,0 to indicate “Very Negative”, 1 to “Negative”, 2 to “Neutral”, 3 to “Positive”, and 4 to “Very Positive”). The polarity is computed by taking advantage of the Stanford NLP framework. The change of the instance made by executing this task is {props: {“polarity”: “1”}}.
ComputePolarityTBWSFromStringBufferPipe添加文本的极性通过查询TextBlob (https://textblob.readthedocs.ioPython库。极性分数计算通过使用这个库是一个浮动范围内(−1.0,1.0)。为了查询从Java、Python TextBlob库REST (Representational State Transfer) web服务(TBWS TextBlob web服务)是很容易启动开发作为一个码头工人容器使用提供的脚本工具。通过执行这个任务,道具的属性示例修改如下:{道具:{“polarityTBWS”:“0.0”}}。
ContractionsFromStringBufferPipe取代收缩在原文使用字典(JSON文件)。替代品,一些特定于语言的字典文件都包含在NLPA。为了正确地选择正确的收缩字典,一个属性存储文本的语言应该是以前计算(见GuessLanguageFromStringBufferPipe)。通过预处理与管道实例的例子(StripHTMLFromStringBufferPipe|GuessLanguageFromStringBufferPipe|ContractionsFromStringBufferPipe),进行以下修改:{道具:{“语言”:“EN”、“language-reliability”:“0.9”},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日,访问我们# xx或@xx”}。
FindEmojiInStringBufferPipe发现并删除(如果需要)emojis从文本并将它们添加实例的一个属性。默认情况下,属性名是“emoji”。这个过程是由利用emoji-java库(https://github.com/vdurmont/emoji-java)。执行这个任务后,以下字段的修改本节中提供的例子:{道具:{“emoji ": " "},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们的< a href = \”http://www.xx.com" > < / >,# xx或@xx”}。
FindEmoticonInStringBufferPipe发现并删除(如果需要)从文本表情符号和创建一个新的属性(默认名为“表情符号”)实例。表情符号被发现使用一个复杂的正则表达式在整个文本。这个任务的一个主要的限制是FindHashtagInStringBufferPipe(见下一段)无法执行。执行这个任务后,以下字段的修改本节中提供的例子:{道具:{“表情符号”:“:-)”},数据:“一定是12月,ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们的< a href = \”http://www.xx.com" > < / >,# xx或@xx”}。
FindHashtagInStringBufferPipe在文本搜索标签并将它们添加属性(默认“标签”)的实例。此外,任务可以配置删除原始文本的识别标签。在内部,这个任务使用一个正则表达式中找到标签文本。使用此任务,提供的示例将被修改为{道具:{“标签”:“# xx”},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们的< a href = \”http://www.xx.com" > < / >,或@xx”}。
FindUrlInStringBufferPipe发现url文本,添加属性(默认“url”)的实例。此外,将url从原文也是可能的。这个任务是由使用正则表达式。FindUserNameInStringBufferPipe(见下一段)后无法执行的任务FindUrlInStringBufferPipe。当应用于所提供的示例中,可以观察到以下更改{道具:{“url”:“http://www.xx.com”},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们在< a href = \ " \ " > < / >, # xx或@xx”}。
FindUserNameInStringBufferPipe利用正则表达式搜索和选择删除令牌的形式“@ <用户名>”文本。另外,它增加了识别用户引用实例的一个属性(默认“@用户名”)。预处理的例子暗示以下更改{道具:{“@用户名”:“@xx”},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们的< a href = \”http://www.xx.com" > < / >,# xx或“}。
GuessLanguageFromStringBufferPipe决定了语言的文本包含在实例。它增加了“语言”和“language-reliability”属性(默认)实例以存储过程的结果。的数据实例的应该包含文本没有HTML标记(电话StripHTMLFromStringBufferPipe的任务)。检测语言和识别成功的概率,我们利用语言检测Java库(https://github.com/optimaize/language-detector),它可以分辨71种语言。通过应用管道(StripHTMLFromStringBufferPipe | GuessLanguageFromStringBufferPipe)为例,实例改变如下:{道具:{“语言”:“EN”、“language-reliability”:“0.9”},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日,访问我们# xx或@xx”}。
InterjectionFromStringBufferPipe能够识别和选择放弃使用字典从文本感叹词(JSON文件)。它将它们添加到“感叹词”属性的实例。感叹词是language-dependant,因此前要计算的语言实例执行这个任务(GuessLanguageFromStringBufferPipe)。这个任务修改以下属性提供的例子:通过应用管道(StripHTMLFromStringBufferPipe|GuessLanguageFromStringBufferPipe | InterjectionFromStringBufferPipe)为例,实例改变如下:{道具:{“语言”:“EN”、“language-reliability”:“0.9”,“感叹词”:“ho ho ho !- ho -在这里——”},数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日,访问我们# xx或@xx”}。
MeasureLengthFromStringBufferPipe添加“长度”属性(默认情况下)通过测量计算中包含的文本的长度数据实例的属性。这个任务做出以下更改所提供的例子:{道具:{“长度”:" 181 "}}。
NERFromStringBufferPipe实现了尼珥将所有标识实体加入实例属性和有选择地删除它们从输入文本。默认情况下,日期(财产“NERDATE”),钱(“NERMONEY”)、数量(“NERNUMBER”),地址(“NERADDRESS”),和位置(“NERLOCATION”)的实体可以认可。尼珥是通过斯坦福NLP框架实现的。更改的例子当执行这个任务{道具:{“NERDATE”:“12月”,“NERMONEY”:“”,“NERNUMBER”:“31”、“NERADDRESS”:“”,“NERLOCATION”:“}}。
SlangFromStringBufferPipe检测俚语术语中输入文本,替换相应的正式术语取自字典(JSON文件)。为了选择合适的字典,文本的语言应该是以前计算(GuessLanguageFromStringBufferPipe)。使用管道(StripHTMLFromStringBufferPipe|GuessLanguageFromStringBufferPipe|SlangFromStringBufferPipe),提供的示例会修改如下:{道具:{“语言”:“EN”、“language-reliability”:“0.9”},数据:“12月来了:-),坚持坚持坚持!击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日,访问我们# xx或@xx”}。
StripHTMLFromStringBufferPipe删除HTML标记和更改HTML实体(即相应的字符。”,n”转化为“n”)。使用此任务,输入示例转换如下:{数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日,访问我们# xx或@xx”}。
StopWordFromStringBufferPipe滴stopwords从文本中数据一个实例的属性。之前发现的文本语言应该选择appropriatestopword字典。的AbbreviationFromStringBufferPipe任务无法执行后一个。的modifications of the example when executing (StripHTMLFromStringBufferPipe|GuessLanguageFromStringBufferPipe|StopWordFromStringBufferPipe)以下的:{道具:{“语言”:“EN”、“language-reliability”:“0.9”},数据:“一定是:12月-),ho ho ho !击败圣诞天给19%在线12月31日访问这里,# xx @xx "}。
最后,StringBufferToLowerCasePipe变换中包含的文本内容数据属性的实例为小写。这个任务修改所提供的示例如下:{数据:“一定是:12月-),ho ho ho !击败了圣诞节的日子和我们同去,我们甚至会在线给您19%折扣,直到12月31日访问我们的< a href = \”http://www.xx.com" > < / >,# xx或@xx”}。
此外,含有一个实例StringBuffer可以转换成一个SynsetSequence或者一个TokenSequence(详细的部分3.3和3.4)。实现这些功能StringBuffer2SynsetSequencePipe和StringBuffer2TokenSequencePipe,分别。前者使用Babelfy API (http://babelfy.org)来识别每个词的同义词集包含在文本。后者实现分词过程使用一组字符作为词分隔符(令牌以base64格式表示)。此外,TeeCSVFromStringBufferPipe实例存储在一个逗号分隔值(CSV)的文件包含所有计算属性与相应的文本和保持实例修改的。管道(StripHTMLFromStringBufferPipe|GuessLanguageFromStringBufferPipe|StringBuffer2SynsetSequencePipe)提供的例子产生以下修改:{道具:{“语言”:“EN”、“language-reliability”:“0.9”},数据:[[“bn: 00025645 n”、“12”], [bn: 00006898 n, " ho "], [“bn: 03100869 n”,“咔咔”],[“bn: 00009396 n”、“击败”],[“bn: 00000086 n”、“圣诞日”],[“bn: 03149538 n”、“在线”],[“bn: 00025645 n”,“12月”],[“bn: 14194518 n”、“访问”)]}。相反,管道(StripHTMLFromStringBufferPipe|GuessLanguageFromStringBufferPipe|StringBufferToLowerCasePipe | StringBuffer2TokenSequencePipe)做以下修改:{道具:{“语言”:“EN”、“language-reliability”:“0.9”},数据:[“tk: ZGVjZW1iZXI =”,“tk: aXM =”,“tk: aHJl”,“tk: aG8 =”,“tk: aG8 =”,“tk: aG8 =”,“tk: 8 j + OhQ = =”,“tk: YmVhdA = =”,“tk: dGhl”,“tk: Y2hyaXN0bWFz”、“tk: ZGF5cw = =”,“tk: d2l0aA = =”,“tk: dXM =”,“tk: YW5k”、“tk: d2U =”,“tk: bGw =”,“tk: ZXZlbg = =”,“tk: Z2l2ZQ = =”,“tk: eW91”、“tk: MTk =”,“tk: b2Zm”、“tk: b25saW5l”、“tk: dW50aWw =”,“tk:婚姻=”,“tk: ZGVj”、“tk: dmlzaXQ =”,“tk: dXM =”,“tk: b24 =”,“tk: aGVyZQ = =”,“tk: eHg =”,“tk: b3I =”,“tk: eHg = ")}。
3.3。处理org.nlp.types.SynsetSequence
一个SynsetSequence对象汇集了一系列的同义词集的文本中发现的一个实例。处理这种数据类型实例作为输入,NLPA包括任务SynsetSequence2FeatureVectorPipe。它能够变换SynsetSequence变成FeatureVector(详细的节3.5),编译复制特性和分配一个分数每个特性根据分组方案。分组方案可以下列之一:(i)SequenceGroupingStrategy.COUNT(默认值),这表明一个同义词集的次数是观察到的序列;(2)SequenceGroupingStrategy.BOOLEAN同义词集时,分配1中包含的内容,否则0;和(3)SequenceGroupingStrategy.FREQUENCY,这表明同义词集的频率在文本(synset是观察到的次数除以整个数量的同义词集)。通过应用实例有这个任务的例子SynsetSequence在数据属性(见以前的分段),我们获得以下变化:{数据:{“bn: 00025645 n”: 2,“bn: 00006898 n”: 1、“bn: 03100869 n”: 1、“bn: 00009396 n”: 1、“bn: 00018836 n”: 1、“bn: 03149538 n”: 1、“bn: 14194518 n”: 1}}。
3.4。处理org.nlp.types.TokenSequence
一个TokenSequence包含的令牌的顺序在一个实例的文本。处理这种数据类型实例作为输入,NLPA包括以下描述的任务。本节,我们将使用实例包含一个TokenSequence在数据属性部分所示3.2。
TokenSequence2FeatureVectorPipe类似地,SynsetSequence2FeatureVectorPipe、转换的令牌的列表包含在文本的数据实例FeatureVector根据选定的分组方案(SequenceGroupingStrategy)。使用此任务,示例实例可以实现下面的转换:{数据:[“tk: ZGVjZW1iZXI =”: 1.0, tk: aXM = ": 1.0,“tk: aHJl”: 1.0, tk: aG8 = ": 3.0,“tk: 8 j + OhQ = =”: 1.0, tk: YmVhdA = = ": 1.0,“tk: dGhl”: 1.0,“tk: Y2hyaXN0bWFz”: 1.0, tk: ZGF5cw = = ": 1.0, tk: d2l0aA = = ": 1.0, tk: dXM = ": 2.0,“tk: YW5k”: 1.0, tk: d2U = ": 1.0, tk: bGw = ": 1.0, tk: ZXZlbg = = ": 1.0, tk: Z2l2ZQ = = ": 1.0,“tk: eW91”: 1.0, tk: MTk = ": 1.0,“tk: b2Zm”: 1.0,“tk: b25saW5l”: 1.0, tk: dW50aWw = ": 1.0, tk:婚姻= ":1.0,“tk: ZGVj”: 1.0, tk: dmlzaXQ = ": 1.0, tk: b24 = ": 1.0, tk: aGVyZQ = = ": 1.0, tk: eHg = ": 2.0, tk: b3I = ": 1.0]}。
TokenSequencePorterStemmerPipe波特抽梗机算法适用于TokenSequence包含在一个实例中。这个方案可以减少变形(或有时派生)话说杆形式,使用一组language-dependant规则。定义的规则的语言。因此,文本的语言应该是以前计算(见GuessLanguageFromStringBufferPipe在3.2节)。通过使用这个任务,提供的例子是转换如下:{数据:[“tk: ZGVjZW1i”、“tk: aQ = =”,“tk: aHJl”,“tk: aG8 =”,“tk: aG8 =”,“tk: aG8 =”,“tk: 8 j + OhQ = =”,“tk: YmVhdGU =”,“tk: dGhl”、“tk: Y2hyaXN0bWE =”,“tk: ZGF5”、“tk: d2l0aA = =”,“tk: dQ = =”,“tk: YW5k”、“tk: d2U =”,“tk: bGw =”,“tk: ZXZlbg = =”,“tk: Z2l2ZQ = =”,“tk: eW91”、“tk: MTk =”,“tk: b2Y =”,“tk: b25saW4 =”,“tk: dW50aWw =”,“tk:婚姻=”,“tk: ZGVj”、“tk: dmlzaXQ =”,“tk: dQ = =”,“tk: b24 =”,“tk: aGVyZQ = =”,“tk: eA = =”,“tk: b3I =”,“tk: eA = = ")}。作为一个例子,任务更改一些令牌包括“天”转化为“天”。
TokenSequenceStemIrregularPipe不规则的阻止(通过语言相关的词典)适用于令牌与前一个相同的目的。的不规则的任务,如果应用,应该执行TokenSequencePorterStemmerPipe,文本的语言应该计算前使用。在这种情况下,实例修改如下:{数据:[“tk: ZGVjZW1iZXI =”,“tk: YmU =”,“tk: aHJl”、“tk: aG8 =”,“tk: aG8 =”,“tk: aG8 =”,“tk: 8 j + OhQ = =”,“tk: YmVhdA = =”,“tk: dGhl”、“tk: Y2hyaXN0bWFz”、“tk: ZGF5cw = =”,“tk: d2l0aA = =”,“tk: dXM =”,“tk: YW5k”、“tk: d2U =”,“tk: bGw =”,“tk: ZXZlbg = =”,“tk: Z2l2ZQ = =”,“tk: eW91”、“tk: MTk =”,“tk: b2Zm”、“tk: b25saW5l”、“tk: dW50aWw =”,“tk:婚姻=”,“tk: ZGVj”、“tk: dmlzaXQ =”,“tk: dXM =”,“tk: b24 =”,“tk: aGVyZQ = =”,“tk: eHg =”,“tk: b3I =”,“tk: eHg = ")}。具体地说,作为一个例子,第二项“是”改为“是”。
3.5。处理org.nlp.types.FeatureVector
FeatureVector编译一组特性的文本属性(synset-based或口令),确定文本的一个实例,和它们的值。处理输入实例数据类型,NLPA包括TeeCSVFromFeatureVectorPipe和TeeDatasetFromFeatureVectorPipe任务,可以将数据保存到磁盘(CSV格式)或内存(org.bdp4j.types.Dataset为他们的后续使用)。这些数据集在Weka可以很容易地用于执行实验机器学习软件(https://www.cs.waikato.ac.nz/ml/weka/通过BDP4J框架提供的功能)。
下一节提供了一个案例研究中,使用NLPA为了显示管道的创建和开发包含一些先前描述的任务。
4所示。使用NLPA
NLPA是BDP4J插件实现自然语言处理任务的一组定义。BDP4J是一个流水线的Java框架能够结合并协调预处理任务的执行顺序或并行。编排可以定义在Java源代码或使用XML文件。此外,BDP4J添加了各种各样的约束检查,防止开发错误(任务依赖关系和输入/输出类型)。BDP4J还支持一个NLPA任务失败时所需的实例失效。它还简历流水线处理硬件软件失败后的执行。最后,BDP4J支持调试模式,能够避免一些任务的执行通过恢复他们取得的结果在之前执行。此功能特别有用的NLPA插件的开发过程中。
图2包括类图和源代码的片段显示BDP4J和NLPA项目之间的相互作用。图2(一个)指定一些建筑的细节来促进两个项目的内部操作的理解。我们可以看到,NLPA任务(其中三个已经作为示例)创建的一个子类org.bdp4j.pipe.AbstractPipeBDP4J。
(一)
(b)
我们可以看到在图2 (b),管道编排包括一些任务(见部分3)按顺序执行(最近行)。为了检查管道是否已经正确定义,执行依赖检查(21 - 25日行)。此外,NLPA整合机制自动从文件加载实例(28 - 29日行)。最后,实例处理(30行)。
下一小节介绍了一个完整的案例研究显示NLPA插件进行更详细的功能和交互BDP4J调用Weka功能。
4.1。一个案例研究
为了测试NLPA的功能,我们开发了一个完整的案例研究,提出了以下。在这种背景下,我们提出一个垃圾邮件过滤问题,将使用毫升解决二进制监督分类法(垃圾邮件和火腿类)。利用TargetAssigningFromPathPipe任务,文件分类存储到“_ham_”和“_spam_”文件夹根据他们的真正的类。应该注意的是,不需要指定一个目标(即其他类型的问题。集群)。
对于这个特定的案例研究中,我们搜索垃圾邮件语料库包含NLPA支持的格式。表2编译的公开全集列表被发现与此目的。
目前的工作,我们选择小型语料库可以快速分析即使可用的计算资源很低。因此,我们发现YouTube垃圾收集的数据集和SMS-Spam-Collection 1节这个案例研究是最适当的全集。对预处理YouTube垃圾收集的数据集,我们使用了IDs的评论(不是文本包含在原始源)和redownloaded原文使用YouTube的公共API6(https://developers.google.com/youtube/v3/)。全集都使用NLPA管道如图预处理3。任务的名称已经根据术语缩写表所示1。
如图3pSynsets和pTokens SerialPipes包括一系列的预处理任务的两个例子(数量)来处理全集。内部处理由管道很相似(有许多常见的黑色在图所示的步骤3)。然而,pSynsets生成一个数据集使用同义词集代表文本而pTokens生成一个基于符号表示。当管道都是开始的时候,目标类(火腿或垃圾邮件)是分配给每个实例(任务1)。然后,输入文件的类型(任务2)和文本日期(任务3)存储在“扩展”和“日期”属性的实例。之后,获得了文本内容从原始文件和包含在数据作为一个属性的一个实例StringBuffer对象(task 4)。从实例的文本,提取的一些属性(使用默认名称):(i)文本的长度(任务5),(2)用户名任务(6),(3)标签(7)任务(iv)的url(8)的任务,(v)表情符号(任务9),(vi) emojis(任务10)。此外,所有文本识别和包含在(除了前面提到的属性我)从原始内容中删除。
后删除HTML标记和替代实体由相应的字符(任务11),由于需要识别的语言实例的应用许多文本转换,我们使用GuessLanguageFromStringBufferPipe(12)的任务。几种基于字典的任务然后执行文本:(i)扩大收缩(任务13),(2)扩大缩写(任务14),(3)俚语术语转换成正式的术语(任务15),(iv)检测和删除感叹词(16)任务,最后(v)下降stopwords(17)的任务。然后文本转换为小写(18)的任务。
18任务后,pSynsets的操作和pTokens显然是不同的。构建一个pSynsets(用绿色突出显示)SynsetSequence(即。,a list of synsets identified in the remaining text) and then transforms the synset sequence into a synset-basedFeatureVector(使用SequenceGroupingStrategy.COUNT)。此外,pTokens(用蓝色突出显示)将文本转换成TokenSequence任务(19)。之后,每个令牌是减少其根形式(任务20和21不规则和正则阻止),然后一个口令FeatureVector构建编译重复标记成一个单一的功能,令牌的次数。
最后,在内存和磁盘使用数据集生成TeeCSVFromFeatureVectorPipe和TeeDatasetFromFeatureVectorPipe(pSynsets任务21日和22日,23日和24日pTokens)。预处理的结果存储在一个CSV文件是有用的,以避免未来预处理相同的全集。
预处理后(NLPA功能),为了继续分类过程,每个数据集分成两个分层组有80%和20%的原始实例用于训练和测试目的,分别。这些数据集的维数降低应用Weka信息增益实现(33训练数据)。Weka的实现(序列最小优化)SMO和NaiveBayes算法被用于创建使用训练数据分类器模型。最后,每个训练模型评估使用测试实例作为输入。
作为比较,图4显示了一个基于百分比的评价方法分析假阳性的数量(FP),假阴性(FN)错误,和点击(OK)一起使用kappa详细比较,记得,精度和f值评估。
(一)
(b)
从图我们可以看出4之间的差异实现的口令和synset-based分类过程不重要SMS-Spam-Collection 1节。然而,我们发现明显的差异YouTube垃圾收集的数据集。穷人性能达到使用同义词集时表示将减少数量的同义词集在每个数据集的多个消息。在这方面,NLPA没有实现推广计划,这将允许分组同义词集特性相似的语义含义(21]。例如,“伟哥”,“西力士”,“阿普唑仑”它可以分组到一个新的“药物”功能。而使用更大的数据集可以部分解决这种情况下,这些解决方案并不是这项工作的范围内。
这个案例研究的源代码提供的评价作为补充文件(nlpa_case_study.zip)。如图所示,NLPA可以很容易地用于评估不同文本预处理和代表性的配置。在下一节中编译一些结论NLPA软件的开发过程中实现的。
5。学习课程和主要结果
这项工作的发展从大数据工具应用到预处理的想法最受欢迎和努力过程来源:文本。许多研究人员正在挖掘社交网络产生的大数据流,为不同的目的(见介绍部分)不使用特定的大数据工具和框架。在这项工作中,我们创建一个BDP4J插件(NLPA),执行一些任务用于预处理文本来源使用管道计划。
BDP4J框架提供实用的功能,如恢复后的管道执行意想不到的软件或硬件故障。然而,最重要的问题,可以从BDP4J强调它所提供的支持是无效情况下随时在整个流水线过程(数据)时发现一个问题。事实上,此功能允许充分的处理情况,如删除的内容包含在一个数据源(例如tweet)或丢弃实例不能被处理,因为他们的语言不能确定。然而,在案例研究中,管道是使用Java API,可以图形化定义(GUI)定义使用命令“java jar bdp4j。java gui”。使用GUI,它可以生成一个XML文件,可以用来预处理实例。最后,节约时间的调试模式是特别有用的开发过程中具体的任务,因为它允许跳过前面的步骤的执行从磁盘加载他们的结果。
NLPA是广泛使用的正则表达式。正则表达式是最有效的形式的识别文本模式(如url和标签)。除了这些常见的用途,正则表达式也被用来促进基于字典的执行任务,比如stopwords移除,简称扩张,或俚语的翻译,使我们正确地完成整个单词的匹配过程,促进了发展我们的建议。然而,正则表达式模式应该小心地创建和调用,以防止失速(34,35]。特别是,中包含的方法以类不应使用,因为它们意味着重新编译正则表达式。
最后,我们利用软件配置管理(SCM)工具和版本控制系统(VCS),也就是说,Maven和Git。前让我们有效地管理软件依赖关系自动构建,测试,使可用的软件通过一个存储库。下一节将展示结论和概述了未来的工作。
6。结论和未来的工作
这项工作介绍了NLPA,插件对大数据进行预处理文本内容为全功能的数据集包含不同的通用文本属性(如长度、语言)连同同义词集或令牌列。为此,NLPA包含各种各样的小预处理任务(如城市语言翻译,发现感叹词,或简称扩大)。NLPA建成使用pipeline-based框架(BDP4J)为了便于处理大数据的文本来源。BDP4J实现计算管道的编制和执行,便于数据的集成Weka机器学习框架。
NLPA提供了一些重要的特性,比如支持多个数据源(Twitter,电子邮件,YouTube的评论、网站和SMS)和文本的语义表示的实现(它)。此外,只有最小的时间需要学习如何操作NLPA和建立一个管道配置与其他工具,如门或UIMA相比。此外,设计新的预处理任务延长NLPA可以通过简单地扩展org.bdp4j.pipe.AbstractPipe类。最后,NLPA是作为开源软件分发使用GPL v。3许可,可以从GitHub(下载36]。
在这项工作中,我们把一个完整的案例研究使用NLPA对两个公开的垃圾邮件数据集进行分类。提供的案例研究实现了一个基本的分析插件的功能,突出了其适用性不同开发和测试解决方案的文本分析领域。
NLPA和其他类似工具的发展成为了重要的为了利用大数据分析当前硬件的进步,特别是大量的文本数据来源。未来的工作包括一个扩展的插件通过实施新的预处理任务(如词类或ngram标记功能支持)和申请分析大数据从不同的领域来实现相关的信息。
数据可用性
NLPA插件的源代码中描述这项研究已经存入GitHub库(https://github.com/sing-group/nlpaDOI:10.5281 / zenodo.3356589)。整个源开发用于案例研究包括在工作已经包含附加文件(nlpa_case_study.zip)。SMS-Spam-Collection v。1数据set used to run the case study included in this work is available for download athttp://www.dt.fee.unicamp.br/∼蒂亚戈/ smsspamcollection /和https://archive.ics.uci.edu/ml/datasets/sms +垃圾邮件+收藏。格式化的语料库(准备使用NLPA)包含在sms-spam-collection文件夹提供补充文件(nlpa_case_study.zip)。
的利益冲突
作者宣称他们没有利益冲突有关的出版。
确认
d . Ruano-Ordas支持的博士后奖学金Xunta德加利西亚(ED481B 2017/018)。此外,这项工作是由项目语义知识集成的基于内容的垃圾邮件过滤(tin2017 - 84658 c2 - 1 - r)的西班牙经济产业和竞争力(SMEIC),国家研究机构(SRA)和欧洲区域发展基金(ERDF)。唱组由于花旗(Centro de Investigacion,Transferencia e Innovacion维哥大学的)举办其IT基础设施。
补充材料
整个源开发用于案例研究包括在工作已经包含附加文件(nlpa_case_study.zip)。格式化的语料库(准备使用NLPA)包含在sms-spam-collection文件夹提供补充文件(nlpa_case_study.zip)。(补充材料)