【问题标题】:Split compound sentences into simple sentences将复合句拆分为简单句
【发布时间】:2017-06-19 09:01:34
【问题描述】:

我正在寻找一个可以将复合句子拆分为简单句子的句子分割器。

例子:

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-compromise,但它们不适用于这些复杂的示例(我知道这是一个难题,因此没有简单的解决方案)。

【问题讨论】:

  • 我想,这不是一个简单的标记化任务,您应该尝试依赖语法语法解析器(如 SyntaxNet),它可以识别复合句中的简单句子在哪里以及连接它们的单词是什么。然后你可以用一个点替换这个词。
  • 你能提供更多关于你已经尝试过的细节吗?
  • 请在scholar.google.com中搜索“释义”一词。

标签: nlp chatbot


【解决方案1】:

首先,您需要从语言(语法)的角度更好地定义“简单句子”对您意味着什么。例如,你可以说那个简单的句子是:

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

简而言之,您有很多选择来定义它,并且根据您的需要,您的“规则”应该更(或更少)严格,因为它会影响您的算法设计和(当然)您的输出。

我会建议你 2 个基本说明

  1. 按标点符号分割,因此您将获得“更简单的句子”(例如您的输入3)
  2. 将这些中的每一个输入到 Spacy 等依赖解析器,并利用依赖链接作为分隔符。

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

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

虽然是一个非常古老的问题,但如果这有帮助会很高兴:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多