2016-07-12 71 views
3

我使用OpenNLP java將字符串轉換爲令牌。但是,我發現圓括號不能被正確識別。OpenNLP Tokenizer中的圓括號

我使用的代碼: `

InputStream is = new FileInputStream("en-token.bin"); 
TokenizerModel model = new TokenizerModel(is); 
Tokenizer tokenizer = new TokenizerME(model); 
String tokens[] = tokenizer.tokenize("the string");` 

例如,字符串爲「我這樣的人(被)關閉的消息」。 輸出結果如下: people like me (are ) turning off the news

「are」的左圓括號未被識別。另外,例如,「401(k)」被轉換爲「401(k」和「)」。

我也嘗試過「SimpleTokenizer」類。它可以分開括號,但也可以將「前頁」分隔爲「我不想要的」「前」和「頁」。

我想知道是否有任何解決方案?

感謝。

+0

不僅圓括號,方括號也不被識別。所以,我們必須查看源代碼。 – Nuwanda

回答

2

看一看this article

它解決的問題:非標準句子結束(括號內)

這意味着某種預處理這裏需要的!

和解決方案給出here

他主要做是記號化括號,括號中放一個空間兩邊這樣的:

sent = untokenizedParenPattern1.matcher(sent).replaceAll("$1 $2"); 
sent = untokenizedParenPattern2.matcher(sent).replaceAll("$1 $2"); 

這不是把空間的唯一途徑在括號的兩邊,但是做這個預處理可以幫助您獲得所需的輸出!

如果您的問題解決了,請分享,希望這有助於您!