文档章节

OpenNLP-Tokenizer

十一月不远
 十一月不远
发布于 2014/09/11 21:52
字数 875
阅读 203
收藏 0

#第三章 Tokenizer# ##Tokenization## OpenNLP Tokenizers分割一个输入字符序列为tokens。Tokens通常是一个单词,标点符号,数字等等。

Pierre Vinken, 61 years old, will join the board as a nonexecutive director Nov. 29.
Mr. Vinken is chairman of Elsevier N.V., the Dutch publishing group.
Rudolph Agnew, 55 years old and former chairman of Consolidated Gold Fields
    PLC, was named a director of this British industrial conglomerate.

The following result shows the individual tokens in a whitespace separated representation.

Pierre Vinken , 61 years old , will join the board as a nonexecutive director Nov. 29 .
Mr. Vinken is chairman of Elsevier N.V. , the Dutch publishing group .
Rudolph Agnew , 55 years old and former chairman of Consolidated Gold Fields PLC ,
    was named a nonexecutive director of this British industrial conglomerate . 
A form of asbestos once used to make Kent cigarette filters has caused a high
    percentage of cancer deaths among a group of workers exposed to it more than 30 years ago ,
    researchers reported . 

OpenNLP提供了多个Tokenizer实现:

  • Whitespace Tokenizer - 一个空格Tokenizer,没有空格的序列被识别为tokens
  • Simple Tokenizer - 一个字符类的Tokenizer ,相同字符类的序列为tokens
  • Learnable Tokenizer - 一个最大熵Tokenizer,基于概率模型检测token边界

大多数词性标注(part-of-speech taggings),句法分析(parsers)等,以这种方式使用文本tokenized工作。确保你的tokenizer产生期望的tokens类型,使用later文本处理组件是非常重要的。

使用OpenNLP(和其他许多系统),tokenization是一个两个阶段的处理:首先,识别句子边界,然后识别其中每一个句子的tokens。

###Tokenizer Tools### ###Tokenizer API### Tokenizers可以通过它定义的API集成到一个应用程序。WhitespaceTokenizer的共享示例可以通过静态字段WhitespaceTokenizer.INSTANCE得到。SimpleTokenizer的共享实例可以使用同样的方式从SimpleTokenizer.INSTANCE得到。在实例化TokenizerME(learnable Tokenizer)前,必须先创建一个Token模型。下面的代码示例展示了怎样加载一个模型。

InputStream modelIn = new FileInputStream("en-token.bin");

try {
  TokenizerModel model = new TokenizerModel(modelIn);
}
catch (IOException e) {
  e.printStackTrace();
}
finally {
  if (modelIn != null) {
    try {
      modelIn.close();
    }
    catch (IOException e) {
    }
  }
}

在模型加载后,可以实例化TokenizerME。

Tokenizer tokenizer = new TokenizerME(model);

Tokenizer提供两个Tokenize方法,两个方法都期望一个包含未被Tokenized的文本的输入String对象。如果可能最好是一个句子,但是取决于learnable Tokenizer的训练,这不是必须的。第一个返回一个String数组,数组中每一个String是一个token。

String tokens[] = tokenizer.tokenize("An input sample sentence.");

输出是一个包含这些tokens的数组。

"An", "input", "sample", "sentence", "."

第二个方法,TokenizePos方法返回一个Span数组,每一个Span包含这个输入String的tokens的开始和结束字符偏移量。

Span tokenSpans[] = tokenizer.tokenizePos("An input sample sentence.");	

这个tokenSpans数组有5个元素。调用Span.getCoveredText得到一个span的文本,它得到一个Span和输入的文本。TokenizerME可以输出被检测的tokens的概率。getTokenProbabilities 方法必须立即调用,在tokenize的方法被调用之后。

TokenizerME tokenizer = ...

String tokens[] = tokenizer.tokenize(...);
double tokenProbs[] = tokenizer.getTokenProbabilities();

tokenProbs 数组的每一个token在线包括一个double值,这个值大小从0到1,1是最大的可能的概率,0是最小的可能的概率值。

##Tokenizer Training## ###Training Tool### ###Training API### Tokenizer提供了API来训练新的tokenization模型。训练需要三个基本步骤:

  • 应用程序必须打开一个示例数据流
  • 调用TokenizerME.train方法
  • 保存TokenizerModel到一个文件或者直接使用它

下面的示例代码解释了这三步:

Charset charset = Charset.forName("UTF-8");
ObjectStream<String> lineStream = new PlainTextByLineStream(new FileInputStream("en-sent.train"),
    charset);
ObjectStream<TokenSample> sampleStream = new TokenSampleStream(lineStream);

TokenizerModel model;

try {
  model = TokenizerME.train("en", sampleStream, true, TrainingParameters.defaultParams());
}
finally {
  sampleStream.close();
}

OutputStream modelOut = null;
try {
  modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));
  model.serialize(modelOut);
} finally {
  if (modelOut != null)
     modelOut.close();
}

##Detokening##

###Detokenizing API### ###Detokenizer Dictionary###

© 著作权归作者所有

十一月不远

十一月不远

粉丝 39
博文 78
码字总数 61436
作品 1
海淀
程序员
私信 提问
自然语言处理工具 Apache OpenNLP 1.7.0 发布

Apache OpenNLP 1.7.0 发布了, OpenNLP 是一个机器学习工具包,用于处理自然语言文本。支持大多数常用的 NLP 任务,例如:标识化、句子切分、部分词性标注、名称抽取、组块、解析等。 更新内...

王练
2017/01/02
1.6K
2
Apache OpenNLP 1.5.2 Incubating

Apache OpenNLP 1.5.2 发布了,下载地址:http://incubator.apache.org/opennlp/download.cgi OpenNLP 是一个机器学习工具包,用于处理自然语言文本。支持大多数常用的 NLP 任务,例如:标识...

红薯
2011/11/29
989
0
Apache OpenNLP 1.8.2 发布,自然语言处理工具

Apache OpenNLP 1.8.2 已发布,OpenNLP 是一个机器学习工具包,用于处理自然语言文本。支持大多数常用的 NLP 任务,例如:标识化、句子切分、部分词性标注、名称抽取、组块、解析等。 该版本...

王练
2017/09/17
530
0
Apache OpenNLP 1.8.0 发布,自然语言处理工具

Apache OpenNLP 1.8.0 发布了,OpenNLP 是一个机器学习工具包,用于处理自然语言文本。支持大多数常用的 NLP 任务,例如:标识化、句子切分、部分词性标注、名称抽取、组块、解析等。 此版本...

王练
2017/05/20
828
1
Apache OpenNLP 1.9.1 发布,自然语言处理工具

Apache OpenNLP 1.9.1 发布了,OpenNLP 是一个机器学习工具包,用于处理自然语言文本。支持大多数常用的 NLP 任务,例如:标识化、句子切分、部分词性标注、名称抽取、组块、解析等。 更新内...

h4cd
2019/01/01
1.2K
1

没有更多内容

加载失败,请刷新页面

加载更多

工作自由--2020年开篇,开启一个项目:工作自由 worksolo.cn

新年伊始,我突发奇想,也是很多人敢想而不敢做的事情,下面我以一个多年软件开发从业者的角度去思考,去设计这个项目,当然希望看到这篇文章的你可以给我更多思路: 项目名称:工作自由 域名...

_aron_
25分钟前
25
0
王道 第一章 计算机系统概述

这门课学的是逻辑实现,不是具体的机型 主要内容: 基本部件的结构和组织方式 基本运算的操作原理 基本部件和单元的设计思想 处理器+内存=计算机 存储器 存储器(高速缓存、主存储器、虚拟存...

heronos
今天
81
0
SpringBoot+Mybatis+Thymeleaf-Build Blog site_1

1、快速构建Springboot项目 (1)、 Spring Boot 项目目录结构介绍 (2)、 Spring Boot 项目启动的几种方式 2、 (1)、hello blog (2)、 DispatchServlet 配置 (3)、 静态 web 资源如何...

杨木发
今天
128
0
关于docker0: iptables: No chain/target/match by that name的问题解决

由于Docker 0默认网桥的iptables策略冲突问题,将导致一些web server启动时出现如下错误: docker: Error response from daemon: driver failed programming external connectivity on endpo......

王焱君
今天
103
0
js 下载 canvas 兼容移动端

很蛋疼的问题PC上好好的, 移动端下载不了 , 貌似前端 js 生成的时 base64 格式的 图片数据,移动端无法直接下载, 但是chrome 移动端和pc端都没问题, 国产的几个浏览器全部挂了 之前的下载方式...

阿豪boy
昨天
96
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部