R+openNLP︱openNLP的六大可实现功能及其在R语言中的应用
每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
openNLP是NLP中比较好的开源工具,R语言中有openNLP packages,但是呢,貌似对中文的支持并不好,笔者试了试,发现结果并不如意。但是也算认识了一番,就来介绍一下。
一些内容转载于白宁超老师:OpenNLP:驾驭文本,分词那些事
————————————————————————————————————————
一、openNLP简介
维基百科:Apache OpenNLP库是一个基于机器学习的自然语言文本处理的开发工具包,它支持自然语言处理中一些共有的任务,例如:标记化、句子分割、词性标注、固有实体提取(指在句子中辨认出专有名词,例如:人名)、浅层分析(句字分块)、语法分析及指代。这些任务通常都需要较为先进的文字处理服务功能。
官方文档:Apache的OpenNLP库是自然语言文本的处理基于机器学习的工具包。它支持最常见的NLP任务,如断词,句子切分,部分词性标注,命名实体提取,分块,解析和指代消解。这些任务通常需要建立更先进的文字处理服务。OpenNLP还包括最大熵和基于感知机器学习。该OpenNLP项目的目标是创造上述任务的成熟工具包。一个附加的目的是提供一种大量预建模型为各种语言,以及这些模型衍生自注释文本资源。
- 开发者: Apache Software Foundation
- 稳定版本: 1.5.2-incubating(2011年11月28日,5年前)
- 开发状态: Active
- 编程语言: Java
- 类型: 自然语言处理
- 网站: http://incubator.apache.org/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.gz | 2015-04-08 09:56 | 1.2M | 基于conllx ddt 数据的分词、句子探测器、POS标注 | |
| openNLPmodels.de_1.5-2.tar.gz | 2015-04-08 09:56 | 8.0M | tiger data数据集分词、句子探测器、POS标注 | |
| openNLPmodels.en_1.5-1.tar.gz | 2015-04-08 09:57 | 74M | opennlp training data分词、句子探测器、POS标注、命名实体识别、解析器、序列标注 | |
| openNLPmodels.es_1.5-1.tar.gz | 2015-04-08 09:57 | 3.8M | conll02 shared task data的命名实体识别 | |
| openNLPmodels.it_1.5-1.tar.gz | 2015-04-08 09:57 | 25M | ||
| openNLPmodels.nl_1.5-2.tar.gz | 2015-04-08 09:57 | 4.1M | conllx alpino data的分词、命名实体、POS标注 | |
| openNLPmodels.pt_1.5-2.tar.gz | 2015-04-08 09:57 | 2.1M | conllx bosque data的POS标注、句子探测、分词 | |
| openNLPmodels.sv_1.5-2.tar.gz | 2015-04-08 09:57 | 2.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~
———————————————————————————
R+openNLP︱openNLP的六大可实现功能及其在R语言中的应用的更多相关文章
- Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
首先来个最简单的一键切换主题功能,就做个白天和晚上的主题好了. 先看我们的styles文件: <resources> <!-- Base application theme. --& ...
- R语言中的字符串处理函数
内容概览 尽管R是一门以数值向量和矩阵为核心的统计语言,但字符串有时候也会在数据分析中占到相当大的份量. R语言是一个擅长处理数据的语言,但是也不可避免的需要处理一些字符串(文本数据).如何高 ...
- R语言中知识点总结(二)
一些函数不知道什么意思要查,看数值例子,做笔记,知道函数的功能,函数和返回值. 网页上查找关键词,巧用查找(ctrl+F) 数据读取处理,有read.table read R-读取数据(导入csv ...
- R语言中常用包(二)
数据导入 以下R包主要用于数据导入和保存数据 feather:一种快速,轻量级的文件格式.在R和python上都可使用readr:实现表格数据的快速导入.中文介绍可参考这里readxl:读取Micro ...
- R语言中的数据处理包dplyr、tidyr笔记
R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了 ...
- R语言学习笔记1——R语言中的基本对象
R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...
- 【R笔记】R语言中的字符串处理函数
内容概览 尽管R是一门以数值向量和矩阵为核心的统计语言,但字符串同样极为重要.从医疗研究数据里的出生日期到文本挖掘的应用,字符串数据在R程序中使用的频率非常高.R语言提供了很多字符串操作函数,本文仅简 ...
- R语言中的机器学习包
R语言中的机器学习包 Machine Learning & Statistical Learning (机器学习 & 统计学习) 网址:http://cran.r-project ...
- 分类-回归树模型(CART)在R语言中的实现
分类-回归树模型(CART)在R语言中的实现 CART模型 ,即Classification And Regression Trees.它和一般回归分析类似,是用来对变量进行解释和预测的工具,也是数据 ...
随机推荐
- 过16道练习学习Linq和Lambda(转)
1. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from studentLinq: from s in Students ...
- 使用jdbc存储图片和大文本
package cn.itcast.i_batch; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...
- 使用H2数据库进行单元测试
背景 H2 数据库是一个开源的嵌入型内存数据库,采用纯Java语言实现: 程序非常小巧轻便,整个完整的Jar包也只有1.5M左右,很容易集成到项目中. 官网地址 http://www.h2databa ...
- iOS-FMDB事务【批量更新数据】
打开数据库(sqlite) ///打开数据库 + (BOOL)openDataBase{ _TYDatabase = [[FMDatabase alloc]initWithPath:[self dat ...
- Java I/O基础
字节流和字符流的区别,字节流一次读取一个字节,字符流一次读取的是一个Unicode码,读取了2个字节. 可以以文本编辑器打开的可以使用字符流读取,否则用字符流读取可能就会出错.图像文件就需要用字节流读 ...
- 洛谷 [P2762] 太空飞行计划问题
最大权闭合子图 胡伯涛论文真是个好东西.jpg 求一个有向图的最大权闭合子图,常应用于有先决条件的最优化问题中 将所有正权点与源点相连,容量为点权; 将所有负权点与汇点相连,容量为点权的相反数; 将原 ...
- BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 [树状数组 离线 离散化]
传送门 刚才我还在郁闷网上怎么没人用$CDQ$分治做 突然发现根本没有时间序.... #include<iostream> #include<cstdio> #include& ...
- shell脚本实现nfs服务安装配置,共享文件分发
##############################Deploy nfs######################## echo "start deploy nfs-server& ...
- mysqldump 备份导出数据排除某张表
就用 --ignore-table=dbname.tablename参数就行,可以忽略多个. /usr/bin/mysqldump -- -uroot -p123456 dbname --ignore ...
- 使用IPTABLES限制IP上传下载速度,如何用iptables限速?
怎样使用IPTABLES限制IP上传下载速度,如何用iptables限速?我们先来看范例: iptables限制某IP的上传速度为1000KB/秒(8Mbps,流入服务器带宽),即在此IP所在的服务器 ...