将复合句分成简单句子

时间:2017-06-19 09:01:34

标签: nlp chatbot

我正在寻找能够将复合句分成简单句子的句子分段器。

示例:

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.

有什么建议吗?我试过NLTK,spacy,segtok,nlp-comprom但是他们没有在这些复杂的例子上工作(我知道这是一个难题,因此没有简单的解决方案)。

1 个答案:

答案 0 :(得分:-1)

首先,您需要从语言(语法)的角度更好地定义“简单句子”对您的含义。例如,您可以说简单的句子是

  • 在中间(句号,逗号,冒号等)不带标点的纯文本
  • 一个动词的人。在这种情况下,您将通过重用另一个句子来处理其中句子“已完成”的层次结构。
  • 类似短语的文本,连词也可以用作分隔符。

简而言之,您可以使用很多替代方法来定义它,并且根据您的需要,“规则”应更加(或更不严格),因为这将影响算法设计和(当然)输出。

我建议您2条基本说明

  1. 通过标点符号分隔,因此您将拥有“较简单的句子”(例如您的input3)
  2. 将每一个输入到诸如Spacy之类的依赖解析器中,并利用依赖链接作为分隔符。

使用您提供的示例进行演示:
Spacy输出这些树input1input2。 您可能会注意到,使用conj作为定界符并合并其余子树,它将返回您期望的输出。 如上所述,通过标点符号分割后,您可以对input3进行相同的操作。

最后,这不是一个简单的任务,使用这些简单的规则可能会很好,但是如果您需要更好的结果,请首先改进对“复合”或“简单”句子含义的定义,然后进一步了解使用机器学习的复杂算法。

尽管这是一个非常古老的问题,但很高兴知道这是否有帮助:)