溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

OpenNLP的Tokenizer怎么用

發(fā)布時(shí)間:2022-01-05 16:51:53 來源:億速云 閱讀:228 作者:iii 欄目:云計(jì)算

這篇文章主要講解了“OpenNLP的Tokenizer怎么用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“OpenNLP的Tokenizer怎么用”吧!

OpenNLP Tokenizers分割一個(gè)輸入字符序列為tokens。Tokens通常是一個(gè)單詞,標(biāo)點(diǎn)符號,數(shù)字等等。

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提供了多個(gè)Tokenizer實(shí)現(xiàn):

  • Whitespace Tokenizer - 一個(gè)空格Tokenizer,沒有空格的序列被識(shí)別為tokens

  • Simple Tokenizer - 一個(gè)字符類的Tokenizer ,相同字符類的序列為tokens

  • Learnable Tokenizer - 一個(gè)最大熵Tokenizer,基于概率模型檢測token邊界

大多數(shù)詞性標(biāo)注(part-of-speech taggings),句法分析(parsers)等,以這種方式使用文本tokenized工作。確保你的tokenizer產(chǎn)生期望的tokens類型,使用later文本處理組件是非常重要的。

使用OpenNLP(和其他許多系統(tǒng)),tokenization是一個(gè)兩個(gè)階段的處理:首先,識(shí)別句子邊界,然后識(shí)別其中每一個(gè)句子的tokens。

###Tokenizer Tools### ###Tokenizer API### Tokenizers可以通過它定義的API集成到一個(gè)應(yīng)用程序。WhitespaceTokenizer的共享示例可以通過靜態(tài)字段WhitespaceTokenizer.INSTANCE得到。SimpleTokenizer的共享實(shí)例可以使用同樣的方式從SimpleTokenizer.INSTANCE得到。在實(shí)例化TokenizerME(learnable Tokenizer)前,必須先創(chuàng)建一個(gè)Token模型。下面的代碼示例展示了怎樣加載一個(gè)模型。

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) {
    }
  }
}

在模型加載后,可以實(shí)例化TokenizerME。

Tokenizer tokenizer = new TokenizerME(model);

Tokenizer提供兩個(gè)Tokenize方法,兩個(gè)方法都期望一個(gè)包含未被Tokenized的文本的輸入String對象。如果可能最好是一個(gè)句子,但是取決于learnable Tokenizer的訓(xùn)練,這不是必須的。第一個(gè)返回一個(gè)String數(shù)組,數(shù)組中每一個(gè)String是一個(gè)token。

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

輸出是一個(gè)包含這些tokens的數(shù)組。

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

第二個(gè)方法,TokenizePos方法返回一個(gè)Span數(shù)組,每一個(gè)Span包含這個(gè)輸入String的tokens的開始和結(jié)束字符偏移量。

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

這個(gè)tokenSpans數(shù)組有5個(gè)元素。調(diào)用Span.getCoveredText得到一個(gè)span的文本,它得到一個(gè)Span和輸入的文本。TokenizerME可以輸出被檢測的tokens的概率。getTokenProbabilities 方法必須立即調(diào)用,在tokenize的方法被調(diào)用之后。

TokenizerME tokenizer = ...

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

tokenProbs 數(shù)組的每一個(gè)token在線包括一個(gè)double值,這個(gè)值大小從0到1,1是最大的可能的概率,0是最小的可能的概率值。

##Tokenizer Training## ###Training Tool### ###Training API### Tokenizer提供了API來訓(xùn)練新的tokenization模型。訓(xùn)練需要三個(gè)基本步驟:

  • 應(yīng)用程序必須打開一個(gè)示例數(shù)據(jù)流

  • 調(diào)用TokenizerME.train方法

  • 保存TokenizerModel到一個(gè)文件或者直接使用它

下面的示例代碼解釋了這三步:

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();
}

感謝各位的閱讀,以上就是“OpenNLP的Tokenizer怎么用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對OpenNLP的Tokenizer怎么用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI