使用core-nlp的DocumentPreprocessor分割句子时处理连词

时间:2017-07-18 11:08:18

标签: java regex stanford-nlp

我正在尝试使用core-nlps的DocumentPreprocessor方法将给定的文本拆分成句子。

以下是我正在使用的代码。

List<String> splitSentencesList = new ArrayList<>();
Reader reader = new StringReader(inputText);
DocumentPreprocessor dp = new DocumentPreprocessor(reader); 
 for(List<HasWord> sentence :dp){
               splitSentencesList.add(Sentence.listToString(sentence).toLowerCase().replace(" .", ""));} 

这适用于大多数情况。但是,我们如何处理句子中的连词?

E.g:

I like coffee and donuts for my breakfast.

理想情况下,应进一步处理:

I like coffee for my breakfast.
I like donuts for my breakfast.

一种选择是执行基于正则表达式的规则以进一步拆分它们。是否有任何内置方法可以在core-nlp中实现这一目标。

对此的任何指示表示赞赏。

1 个答案:

答案 0 :(得分:2)

简单的答案是:你不能使用DocumentPreprocessor来做到这一点。它旨在根据标点符号分割您的句子。当一个连词(如)出现时,没有办法告诉它分割句子(或者更确切地说是复制它)。

您使用正则表达式的想法可能只是最简单的方法。您还可以使用CoreNLP的依赖关系解析并检查连接两个直接对象的连接。

Dependency Parse

对于上面描述的句子,一个简单的正则表达式可能就是这样做的,而依赖性解析可能会派上用场,如果你的句子变得更复杂。