Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nlp 把复合句分成简单句_Nlp_Chatbot - Fatal编程技术网

Nlp 把复合句分成简单句

Nlp 把复合句分成简单句,nlp,chatbot,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 favor

我正在寻找一个分句器,可以分裂成简单的句子复合句

例如:

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折衷方案,但它们无法处理这些复杂的示例(我理解这是一个难题,因此没有简单的解决方案)。

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

    只是中间没有标点符号的文字(句号、逗号、冒号等)
  • 只有一个动词的。在这种情况下,您将处理通过重用另一个句子来“完成”句子的层次结构
  • 类似于文本的短语,其中连词也可以用作分隔符
简言之,您有很多选择来定义它,根据您的需要,您的“规则”应该更严格(或更严格),因为它将影响您的算法设计和(当然)输出

我建议你两个基本的指示

  • 按标点分开,这样你就有了“更简单的句子”(例如,你的输入3)
  • 将它们中的每一个输入到依赖项解析器(如Spacy),并利用依赖项链接作为分隔符
  • 使用您提供的示例演示:
    Spacy输出这些树和树。 您可能会注意到,使用
    conj
    作为分隔符并合并其余子树,它将返回您期望的输出。 正如我前面提到的,在按标点符号分割后,您可以对输入3执行相同的操作

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


    虽然这是一个非常古老的问题,但如果知道这是否有帮助,那就太好了:)

    我想,这不是一个简单的标记化任务,您应该尝试依赖语法解析器(如SyntaxNet)这将确定复合句中的简单句在哪里,以及哪些单词将它们连接起来。然后你可以用点替换这个单词。你能提供更多关于你已经尝试过的内容的详细信息吗?请在中搜索“解释”一词。