R+openNLP︱openNLP的六大可实现功能及其在R语言中的应用

原创 2016年08月30日 12:46:10



每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————


openNLP是NLP中比较好的开源工具,R语言中有openNLP packages,但是呢,貌似对中文的支持并不好,笔者试了试,发现结果并不如意。但是也算认识了一番,就来介绍一下。

一些内容转载于白宁超老师:OpenNLP:驾驭文本,分词那些事


————————————————————————————————————————


一、openNLP简介


维基百科Apache OpenNLP库是一个基于机器学习自然语言文本处理的开发工具包,它支持自然语言处理中一些共有的任务,例如:标记化句子分割词性标注固有实体提取(指在句子中辨认出专有名词,例如:人名)、浅层分析句字分块)、语法分析指代。这些任务通常都需要较为先进的文字处理服务功能。

官方文档:Apache的OpenNLP库是自然语言文本的处理基于机器学习的工具包。它支持最常见的NLP任务,如断词,句子切分,部分词性标注,命名实体提取,分块,解析和指代消解。这些任务通常需要建立更先进的文字处理服务。OpenNLP还包括最大熵和基于感知机器学习。该OpenNLP项目的目标是创造上述任务的成熟工具包。一个附加的目的是提供一种大量预建模型为各种语言,以及这些模型衍生自注释文本资源。


————————————————————————————————————————


二、六大功能——openNLP packages


R中的openNLP主要有以下几个功能:

序列标注(maxent chunker)、实体命名识别(maxent entity annotator)、词性标注器(ops tag annotator)、句子探测器(sent toen annotator)、解析器(parse annotator)、标记生成器(maxent word token annotator)


1、序列标注(maxent chunker)

文本分块由除以单词句法相关部分,如名词基,动词基的文字,但没有指定其内部结构,也没有其在主句作用。

R语言中函数名称:Maxent_Chunk_Annotator()——Apache OpenNLP Maxent chunker.


2、实体命名识别(maxent entity annotator)

名称查找器可检测文本命名实体和数字。为了能够检测实体名称搜索需要的模型。该模型是依赖于语言和实体类型这是训练。所述OpenNLP项目提供了许多这些各种免费提供的语料库训练有素预训练名取景模式。后面会提到如何下载。

根据不同的模型可以查找人名、地名等实体名

R语言中函数名称:Maxent_Entity_Annotator—— Apache OpenNLP Maxent namefinder.


3、词性标注器(ops tag annotator)

语音标记器的部分标记符号与基于符号本身和符号的上下文中它们的相应字类型。符号可能取决于符号和上下文使用多个POS标签。该OpenNLP POS标注器使用的概率模型来预测正确的POS标记出了标签组。为了限制可能的标记的符号标记字典可以使用这增加了捉人者的标记和运行时性能。

R语言中函数名称:pos_tag_annotator——Apache OpenNLP MaxentPart of Speech tagger.


4、句子探测器(sent toen annotator)

功能介绍:

句子检测器是用于检测句子边界。

句子探测器返回一个字符串数组。

R语言中函数名称:sent_token_annotator——Apache OpenNLP Maxentsentence detector


5、解析器(parse annotator)、针对english

尝试解析器最简单的方法是在命令行工具。该工具仅用于演示和测试。请从我们网站上的英文分块解析器模型,并用以下命令启动解析工具。

R语言中函数名称:Parse_Annotator—— Apache OpenNLPchunking parser for English


6、标记生成器/断句/分词(maxent word token annotator)

OpenNLP断词段输入字符序列为标记。常是这是由空格分隔的单词,但也有例外。例如,“isn't”被分割为“is”与“n't",因为它是AA简要格式”isn't“我们的句子分为以下标记:符号通常是词语,标点符号,数字等OpenNLP提供多种标记生成器的实现:

  • 空白标记生成器 - 一个空白标记生成器,非空白序列被确定为符号
  • 简单的标记生成器 - 一个字符类标记生成器,同样的字符类的序列标记
  • 可学习标记生成器 - 一个最大熵标记生成器,检测基于概率模型符号边界
R语言中函数名称:word_token_annotator——e Apache OpenNLP Maxenttokenizer


————————————————————————————————————————


三、openNLP在R中的实现以及使用心得


1、使用前预加载


openNLP基于众多语料训练了很多已有的实体词、取词场景等,在R中需要到指定网址下载(http://datacube.wu.ac.at/),这里笔者也附上openNLP的官方链接(http://opennlp.sourceforge.net/models-1.5/

[   ]openNLPmodels.da_1.5-2.tar.gz2015-04-08 09:561.2M基于conllx ddt 数据的分词、句子探测器、POS标注
[   ]openNLPmodels.de_1.5-2.tar.gz2015-04-08 09:568.0Mtiger data数据集分词、句子探测器、POS标注
[   ]openNLPmodels.en_1.5-1.tar.gz2015-04-08 09:5774Mopennlp training data分词、句子探测器、POS标注、命名实体识别、解析器、序列标注
[   ]openNLPmodels.es_1.5-1.tar.gz2015-04-08 09:573.8Mconll02 shared task data的命名实体识别
[   ]openNLPmodels.it_1.5-1.tar.gz2015-04-08 09:5725M 
[   ]openNLPmodels.nl_1.5-2.tar.gz2015-04-08 09:574.1Mconllx alpino data的分词、命名实体、POS标注
[   ]openNLPmodels.pt_1.5-2.tar.gz2015-04-08 09:572.1Mconllx bosque data的POS标注、句子探测、分词
[   ]openNLPmodels.sv_1.5-2.tar.gz2015-04-08 09:572.4M

其中词性标注有:最大熵模型(Part of Speech Tagger)、感知器模型Perceptron model(pos标注),R只有前者。

从大小来看也知道en是最全面的,所以要下载。

下载的方式跟调用包一样方便:

 install.packages("foo", repos = "http://datacube.wu.ac.at/", type = "source")
其中foo代表着你要下载内容的名称,比如:openNLPmodels.en


2、R语言实践——官方案例


(1)先得到序列:

s <- paste(c("Pierre Vinken, 61 years old, will join the board as a ",
             "nonexecutive director Nov. 29.\n",
             "Mr. Vinken is chairman of Elsevier N.V., ","the Dutch publishing group."),
           collapse = "")
s <- as.String(s)   #library(NLP)

(2)设置分词器以及句子探测器:

sent_token_annotator <- Maxent_Sent_Token_Annotator()
word_token_annotator <- Maxent_Word_Token_Annotator()
pos_tag_annotator <- Maxent_POS_Tag_Annotator()

(3)解析分词、词性、整句到a3:

a3 <- annotate(s,
               list(sent_token_annotator,
                    word_token_annotator,
                    pos_tag_annotator))

(4)进行后续的分析(序列标注、命名实体识别):

序列标注的code:

annotate(s, Maxent_Chunk_Annotator(probs = TRUE), a3)
实体识别的code:
annotate(s, Maxent_Entity_Annotator(probs = TRUE), a2)

其中probs代表是否需要从最大熵模型中提取出概率。




参考文献:

1、open在案例:OpenNLP Tutorial

2、openNLP在R中的数据集:http://datacube.wu.ac.at/

3、R中的openNLP文档:https://cran.r-project.org/web/packages/openNLP/openNLP.pdf

每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————

版权声明:本文为博主原创文章,转载请注明来源“素质云博客”,谢谢合作!!微信公众号:素质云笔记

openNLP总结

OpenNLP是Apache基金会下面的一个机器学习工具包,用于处理自然语言文本。支持大多数常用的NLP任务,例如:分词、分句、词性标注、命名实体识别、主块分析、语法解析等。其中几个主要的学习网址; ...
  • wang_shiwei
  • wang_shiwei
  • 2017年02月23日 15:03
  • 1335

OpenNLP进行中文命名实体识别(下:载入模型识别实体)

使用OpenNLP训练命名实体识别模型
  • qdhy199148
  • qdhy199148
  • 2016年04月03日 19:01
  • 4147

R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词。大致分析步骤如下: 数据导入——选择分词字典——分词...
  • sinat_26917383
  • sinat_26917383
  • 2016年04月04日 13:38
  • 17784

OpenNLP进行中文命名实体识别(上:预处理及训练模型)

使用Apach OpenNLP进行中文命名实体识别
  • qdhy199148
  • qdhy199148
  • 2016年04月02日 22:40
  • 7072

openNLP的POSTagger使用(一)训练模型

以前都是在新浪上写的博客,当然了,自娱自乐的性质比较多一些。当时没有选择CSDN的原因是因为这上面大牛太多了,像我这种菜鸟级别的就不好意思在这里浪费笔墨了。不过后来发现在查资料大部分还是要在这里查,在...
  • yueliangku
  • yueliangku
  • 2014年11月25日 21:05
  • 1393

R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词。大致分析步骤如下: 数据导入——选择分词字典——分词...
  • sinat_26917383
  • sinat_26917383
  • 2016年04月04日 13:38
  • 17784

R+OCR︱借助tesseract包实现图片文本提取功能

2016年11月,Jeroen Ooms在CRAN发布了tesseract包,实现了R语言对简单图片的文本提取、分析功能。 利用开源OCR引擎进行图片处理,目前可以识别超过100种语言,R语言可...
  • sinat_26917383
  • sinat_26917383
  • 2017年01月15日 10:39
  • 3167

R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(二,textreuse介绍)

上一篇(R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理))讲解了LSH的基本原理,笔者在想这么牛气冲天的方法在R语言中能不能实现得了呢? 于是在网上搜索了一下,真的发现了...
  • sinat_26917383
  • sinat_26917383
  • 2016年09月07日 12:14
  • 2180

重磅︱文本挖掘深度学习之word2vec的R语言实现

笔者寄语:2013年末,Google发布的 word2vec工具引起了一帮人的热捧,大家几乎都认为它是深度学习在自然语言领域的一项了不起的应用,各种欢呼“深度学习在自然语言领域开始发力 了”。 基于w...
  • sinat_26917383
  • sinat_26917383
  • 2016年11月25日 23:33
  • 11418

R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理)

私认为,文本的相似性可以分为两类:一类是机械相似性;一类是语义相似性。 机械相似性代表着,两个文本内容上的相关程度,比如“你好吗”和“你好”的相似性,纯粹代表着内容上字符是否完全共现,应用场景在:文章...
  • sinat_26917383
  • sinat_26917383
  • 2016年09月06日 18:54
  • 2424
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:R+openNLP︱openNLP的六大可实现功能及其在R语言中的应用
举报原因:
原因补充:

(最多只允许输入30个字)