Algorithm 语法发现,或句子树生成器

Algorithm 语法发现,或句子树生成器,algorithm,graph,Algorithm,Graph,我通常非常擅长算法,但我这里有一个非常抽象的问题,可能是某个人的博士项目,接近NP完全性。但也许这是一个比我想象的更普遍的问题 我有一个25000个字符串的列表,使用一系列下拉列表和文本字段创建。所以,为了简化讨论,我们假设这是,呃,单向图: {我的猫/我的狗}生了{小猫,小狗} 这就像一个树结构,它的4条路径代表4个可能的句子 如何从一个(可能不完整的)句子列表中逆向工程树结构 i、 e 所以从 我的猫生了小猫 我的猫生了小狗 我的狗有小猫, 您仍然可以重新创建原始语法树 显然,25000个字

我通常非常擅长算法,但我这里有一个非常抽象的问题,可能是某个人的博士项目,接近NP完全性。但也许这是一个比我想象的更普遍的问题

我有一个25000个字符串的列表,使用一系列下拉列表和文本字段创建。所以,为了简化讨论,我们假设这是,呃,单向图:

{我的猫/我的狗}生了{小猫,小狗}

这就像一个树结构,它的4条路径代表4个可能的句子

如何从一个(可能不完整的)句子列表中逆向工程树结构

i、 e

所以从
我的猫生了小猫
我的猫生了小狗
我的狗有小猫, 您仍然可以重新创建原始语法树

显然,25000个字符串需要一段时间。但是有没有这样的软件呢?或者,这是一个足够普遍的问题,以至于有已知的算法可以做到这一点吗

它在本质上看起来像一个正则表达式解析器,但我不知道从哪里开始。我在工作中处理这个问题,每次我发现一个新模式时,我都会自己分析句子,解析另外500个左右的句子。但是我想如果我有树的结构,我可以把它砍掉

有什么想法吗? 谢谢

这对你来说是朝着正确方向迈出的一步吗?它的目标是推断类似格式字符串背后的模板,稍后允许您使用此模板从其他字符串中提取数据。

对您来说可能是正确的一步?其目标是推断类似格式字符串背后的模板,稍后允许您使用此模板从其他字符串提取数据

但也许这是一个比我想象的更普遍的问题

我相信这就是众所周知的

但也许这是一个比我想象的更普遍的问题


我相信这就是众所周知的。

这可能属于学习有限自动机的范畴,在这种情况下,这确实是一个困难的问题,至少在该领域的标准假设下是如此。但是,我怀疑您的情况比大多数情况更简单,因为您知道,如果每个字符串都出现错误,则机器在开始时处于单一启动状态


如果查找“学习有限自动机”太令人沮丧,那么您可以找到一些用于拟合隐马尔可夫模型的代码,放开它,并抱着最好的希望。

这可能属于“学习有限自动机”的标题,在这种情况下,这确实是一个困难的问题,至少在该领域的标准假设下是如此。但是,我怀疑您的情况比大多数情况更简单,因为您知道,如果每个字符串都出现错误,则机器在开始时处于单一启动状态


如果查找“学习有限自动机”太令人沮丧,您可以只获取一些用于拟合隐马尔可夫模型的代码,让它自由发挥,并期待最好的结果。

您对正则表达式的直觉可能是正确的。 这是语法归纳法的典型设置:归纳(“查找”)一组允许生成/识别一组字符串的规则

通常,树是可视化和操作此类规则的良好结构

第一个问题是:字符串是否如此规则? (这个问题的答案并不是那么容易,一个有效的方法可能是尝试通过人工检查来确定推断出的语法是否符合您的目标)。 如果示例结构的简单性表明了这种方法,那么您可以采用常规语法归纳法

有关一些可用库的信息,请参见:


    • 您对正则表达式的直觉可能是正确的。 这是语法归纳法的典型设置:归纳(“查找”)一组允许生成/识别一组字符串的规则

      通常,树是可视化和操作此类规则的良好结构

      第一个问题是:字符串是否如此规则? (这个问题的答案并不是那么容易,一个有效的方法可能是尝试通过人工检查来确定推断出的语法是否符合您的目标)。 如果示例结构的简单性表明了这种方法,那么您可以采用常规语法归纳法

      有关一些可用库的信息,请参见:


      如果它是不完整的,我对人工智能的了解还不够,无法找出它如何重建丢失的链接。从你给出的例子来看,狗是否可以生小狗还不清楚——除非,如果它们生的是同一个孩子,那么它们生的都是同一个孩子?规则是什么,这是如何表现的?如果它是不完整的,你怎么知道任何含有“had”一词的句子都没有指向特定的“had”节点,并且证明它的其余句子不仅仅是缺失的?如果你不能容忍任何误报,这显然是不可能的。即使可以,在我看来,您也必须为任何类型的语法发现算法提供反例。否则很容易产生一个太容易接受的语法——例如,在你的例子中,
      /(我的猫狗有小猫小狗)*
      ,或者就是
      /.*/
      。如果它不完整,我对人工智能的了解还不够,无法找出它如何重建丢失的链接。从你给出的例子来看,狗是否可以生小狗还不清楚——除非,如果它们生的是同一个孩子,那么它们生的都是同一个孩子?规则是什么,这是如何表现的?如果它是不完整的,你怎么知道任何含有“had”一词的句子都没有指向特定的“had”节点,并且证明它的其余句子不仅仅是缺失的?如果你不能容忍任何误报,这显然是不可能的。即使可以,在我看来,您也必须为任何类型的语法发现算法提供反例。否则,很容易做出一个太容易接受的语法——比如f