千家信息网

OpenNLP的Tokenizer怎么用

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要讲解了"OpenNLP的Tokenizer怎么用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"OpenNLP的Tokenizer怎么用"吧
千家信息网最后更新 2025年01月31日OpenNLP的Tokenizer怎么用

这篇文章主要讲解了"OpenNLP的Tokenizer怎么用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"OpenNLP的Tokenizer怎么用"吧!

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 lineStream = new PlainTextByLineStream(new FileInputStream("en-sent.train"),    charset);ObjectStream 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();}

感谢各位的阅读,以上就是"OpenNLP的Tokenizer怎么用"的内容了,经过本文的学习后,相信大家对OpenNLP的Tokenizer怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0