我正在寻找一个可以将复合句拆分成简单句的句子分割器。
例子:
Input: Andrea is beautiful but she is strict.
(expected) Output: Andrea is beautiful. she is strict.
Input: i am andrea and i work for google.
(expected) Output: i am andrea. i work for google.
Input: Italy is my favorite country; i plan to spend two weeks there next year.
(expected) Output: Italy is my favorite country. i plan to spend two weeks there next year.
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?我尝试了 NLTK、spacy、segtok、nlp-compromise,但它们不适用于这些复杂的示例(我知道这是一个难题,因此没有简单的解决方案)。
首先,你需要从语言(语法)的角度更好地定义“简单句子”对你意味着什么。例如,你可以说这个简单的句子是:
简而言之,您有很多选择来定义它,并且根据您的需要,您的“规则”应该更加(或不太)严格,因为它将影响您的算法设计和(当然)您的输出。
我建议你 2 条基本说明
使用您提供的示例进行演示:
Spacy 输出这些树input1和input2。您可能会注意到,使用conj作为分隔符并合并剩余的子树,它会返回您期望的输出。正如我上面提到的,在按标点符号分割后,您可以对 input3 执行相同的操作。
最后,这不是一个简单的任务,您可能可以接受这些简单的规则,但如果您需要更好的结果,请首先改进您对“复合”或“简单”句子含义的定义,并使用以下命令查看更复杂的算法机器学习。
虽然这是一个非常古老的问题,但很高兴知道这是否有帮助:)