2016-07-12 26 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"); 

这不是把空间的唯一途径在括号的两边,但是做这个预处理可以帮助您获得所需的输出!

如果您的问题解决了,请分享,希望这有助于您!