OpenNLP初尝试--自然语言处理
引言
最近对自然语言处理特别感兴趣,之前上了一个研修课就想尝试着文本分析来着,但是由于时间关系和能力关系没实施,这学期又要提交一个大作业,要求是让计算机读入一段文本并自动的生成文本中叙述的场景,感觉很难,而且还在初步尝试中。
大体的流程应该是上述,不过目前我还在尝试用现有的NLP技术理解文本。
最近,我浏览网页发现呼声比较高的就是OpenNLP这个开源的工具包,下面我来简单描述一下我最近的尝试。
OpenNLP
OpenNLP 是一个机器学习工具包,用于处理自然语言文本。支持大多数常用的 NLP 任务,例如:标识化、句子切分、部分词性标注、名称抽取、组块、解析等。
这是它的主页,如果你对自然语言处理感兴趣,你可以通过访问OpenNLP去访问它,并下载Apache OpenNLP的工具包去亲身体验。
网页 上还能找到好多已经训练好的语言模型,也有十分详细的操作手册,但是由于我是这方面的小白所以不是很能理解。
Eclipse配置
由于最近一直在搞java所以想着实际编程去实现一下利用现有的工具包去实现分词分句等基础的NLP操作。
解压缩之后你会看到如上情景,你可以尝试着将你的lib文件安排到你的eclipse插件中,或者如下
找到你lib下的这两个.jar文件,放置到你的工程文件的lib文件中,然后在你的程序中
右键project->build path->configure build path,
然后在打开的文件中单击“add library”将这两个包添加进去,然后Apply and Close就好了,就能像用你的jre中提供好的API一样利用OpenNLP中提供的API进行自然语言处理了。
实操
添加了这两个包之后,就是编程利用现有的API,不过我只初步尝试了分词分句技术,通过阅读OpenNLP的网站提供的手册可以了解到网站上提供了诸多的训练好的语言模型,(当然有能力也可以自己训练,网站上提供的毕竟不是普适的)
try(InputStream modelIn = new FileInputStream(“en-sent.bin”)){SentenceModel model = new SentenceModel(modelIn);
}
其中“en-sent.bin”就是网站上面提供的已经训练好的英语分句的语言模型,你可以下载并加载入程序中应用。
接下来,你可以实例化SentenceDetectorME,使用sentDetect 进行分句。
/* Instantiation */SentenceDetectorME sentenceDetector = new SentenceDetectorME(model);/* sentence segmentation */String sentences[] = sentenceDetector.sentDetect(str);
测试结果如下
input :
This isn't the greatest example sentence in the world because I've seen better. Neither is this one. This one's not bad, though.
output:
-----------
This isn't the greatest example sentence in the world because I've seen better.
Neither is this one.
This one's not bad, though.
效果显著,同样语句处理分词结果(详细见下面详细代码)如下:
output:
This
is
n't
the
greatest
example
sentence
in
the
world
because
I
've
seen
better
.
Neither
is
this
one
.
This
one
's
not
bad
,
though
.
感受:
API真的好用,能用就用,能写当然也最好
代码:
public class NaturalLanguageProcess {/*** Main* @param args -Commend Line.*/public static void main(String[] args) {String testString = "This isn't the greatest example sentence in the world because I've seen better. Neither is this one. This one's not bad, though.";String tokens[] = Token(testString);String sentences[] = sentenceSegmentation(testString);for (String string : tokens) {System.out.println(string);}System.out.println("-----------");for (String string : sentences) {System.out.println(string);}}/*** Sentence Segmentation.* @param str - a paragraph * @return -the divided sentences of the input as a result*/public static String[] sentenceSegmentation(String str) {try {InputStream modelIn = new FileInputStream("src//file//en-sent.bin");SentenceModel model = null;try {model = new SentenceModel(modelIn);} catch (IOException e) {e.printStackTrace();} finally {if (modelIn != null) {try {modelIn.close();} catch (IOException e) {e.printStackTrace();}}}/* Instantiation */SentenceDetectorME sentenceDetector = new SentenceDetectorME(model);/* sentence segmentation */String sentences[] = sentenceDetector.sentDetect(str);return sentences;} catch (FileNotFoundException e1) {e1.printStackTrace();return null;}}/*** Break sentences into words and return.* @param str - the sentences which need to be divide.* @return - All the words as a result */public static String[] Token(String str) {try {InputStream modelIn = new FileInputStream("src//file//en-token.bin");TokenizerModel model = null;try {model = new TokenizerModel(modelIn);} catch (IOException e) {e.printStackTrace();} finally {if (modelIn != null) {try {modelIn.close();} catch (IOException e) {e.printStackTrace();}}}/* Instantiation */TokenizerME tokenizer = new TokenizerME(model);/* word segmentation */String tokens[] = tokenizer.tokenize(str);return tokens;} catch (FileNotFoundException e) {e.printStackTrace();}return null;}
}
OpenNLP初尝试--自然语言处理相关推荐
- SQLSERVER2012里的扩展事件初尝试(上)
SQLSERVER2012里的扩展事件初尝试(上) SQLSERVER2012里的扩展事件初尝试(下) 周未看了这两篇文章: 扩展事件在Denali CTP3里的新UI(一) 扩展事件在Denali ...
- Serverless 开发前端初尝试
Serverless 开发前端初尝试 啥是云开发 云开发serverless是一种模式,和传统模式的区别在于开发者不用维护服务器.服务器的日常维护, 负载均衡,扩容和减容, 运维,安全,日志等都交给了 ...
- Wireshark研究血族Bloodline手游聊天系统 - 初尝试
血族Bloodline手游聊天系统的相关研究 目录 1. 介绍&起因 2. Fiddler初尝试 3. Wireshark初尝试 4. 总结 一.介绍&起因 ↶ (PS. 容我说先几句 ...
- eclipse Debug 初尝试 (09.10教师节(*^▽^*))
09.10 eclipse Debug 初尝试 首先我们新建一个project,class.在其中写入我们即将要调试的源代码. 点击工具栏的瓢虫图标,进入debug界面(或者点击上面的Run-> ...
- HarmonyOS实战—原子化服务初尝试
目录 原子化服务初尝试 什么是原子化服务 原子化服务的优点 创建原子化服务项目 运行原子化服务项目 目录结构分析 原子化服务初尝试 什么是原子化服务 原子化服务是HarmonyOS提供的一种面向未来的 ...
- Cydia Substrate 初尝试:刷计步软件数据
Cydia Substrate 初尝试:刷计步软件数据 Cydia Substrate 初尝试刷计步软件数据 Cydia 设备准备 探索 思路 监听器注册 事件分发 进行Hook Cydia Cydi ...
- vuejs和webpack项目(VueComponent)初尝试——瀑布流组件
碎碎念: 好久不见,最近自己有些懈怠没更过多少博,主要原因之一是对自己学习方式的一些思考,翻看之前的博客多是记录学习笔记这反映出了自己对于前端还停留在学习-复习知识点的阶段压根没多少实践经验 ...
- 手机编程环境初尝试-用AIDE开发Android应用
前不久才接触到纯粹用手机进行编程的开发者, 当时颇有孤陋寡闻之感, 因为之前听说过手机编程还是一些在线编程学习网站开发的学习环境, 没有想过真的有用它做实际开发的. 此文用AIDE免费版在自己的手机上 ...
- 不安分的 android 开发者(小程序初尝试)
前言 作为一个稍微有点想法的程序员来说,拥有一个自己开发,自己运营,完全属于自己的应用,应该是很多人的梦想.刚毕业那会,自己的工作是做游戏,于是也和朋友业余时间开发一些小游戏玩玩,可是终究不成气候,而 ...
- 不安分的android开发者(小程序初尝试,前后台都自己做)
前言 作为一个稍微有点想法的程序员来说,拥有一个自己开发,自己运营,完全属于自己的应用,应该是很多人的梦想.刚毕业那会,自己的工作是做游戏,于是也和朋友业余时间开发一些小游戏玩玩,可是终究不成气候,而 ...
最新文章
- Oracle to_char函数的使用方法
- c语言作业 统计成绩,C语言作业 输入多名学生3门课程成绩,并统计成绩的平均分和总分,并根据总分输出名次。...
- python开发工程师面试题-超实用面试必看,Python工程师面试题
- Simcenter Flotherm Crack 2020中文版
- LibreOJ #6002. 「网络流 24 题」最小路径覆盖
- 【转载】从百度、360、搜狗对新站态度看国内搜索引擎技术现状
- php归档函数(按时间)实现
- 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放
- LintCode MySQL 1932/1933. 挂科最多的同学 I / II
- 消费者驱动的微服务契约测试套件Spring Cloud Contract
- 三年后见!雷军透露年轻人的第一台汽车售价......
- 求素数--筛选法和打表
- 重大安全事件 | Ubuntu 16.04.4 暴本地提权漏洞
- c语言实现 网络嗅探程序代码,C语言实现网络嗅探器
- 检测CCD Dead Pixel
- kindle dxg汉化和安装kindlepdfviewer
- 2、Docker部署的Onlyoffice中文字体修改
- 简易数据分析 04 | Web Scraper 初尝--抓取豆瓣高分电影
- react-router4.2使用js控制路由跳转的3种方式
- 李开复:搞无人车在电车难题上论争个没完,这样子不行的
热门文章
- django_jquery_ajax二级联动菜单
- matlab 复制 模块,想把m文件在simulink 中的调用,我用的是matlab function 模块。
- 微信提示在客户端提交验证_微信提示非常用设备要求输入短信验证码解决方法...
- c语言中文网_C语言学习网站推荐
- 贝塞尔曲线及实践案例
- Python几个编程小作业
- Grafana panel 图形高级定制
- p6spy 非常典型 启用SQL日志
- ICLR 2022最佳论文:基于对比消歧的偏标签学习
- python背单词程序设计_python背单词小程序