我通常非常擅长算法,但我在这里有一个非常抽象的问题,这可能是某个人的某个博士项目,并且接近于NP的完整性。但也许这比我想象的更常见。
我有一个25000字符串的列表,使用一堆下拉列表和文本字段创建。因此,为了简化讨论,我们可以说这是呃单向图:
{我的猫/我的狗} 有 {小猫,小狗} 。
所以,这就像一个树结构,其4条路径代表4个可能的句子。
如何从一个(可能不完整的)句子列表中对树结构进行逆向工程?
即
从而来 我的猫有小猫
我的猫有小狗 我的狗有小猫, 你仍然可以重新创建原始语法树。
显然有25000个字符串,这需要一段时间。但是有没有这样做的软件?或者,这是一个常见的问题,有已知的算法可以做到这一点吗?
它似乎是一个正则表达式解析器,但我不知道从哪里开始。我正在处理工作中的这个问题,并且每次找到新模式时,我都会对句子进行分析以解析另外500个左右的问题。但我估计如果我有树状结构,我可以用它来切碎。
有什么想法吗? 感谢
答案 0 :(得分:2)
templatemaker可以为你朝着正确的方向迈出一步吗?它的目标是推断类似格式的字符串背后的模板,稍后允许您使用此模板从其他字符串中提取数据。
答案 1 :(得分:2)
这可能属于学习有限自动机的标题,在这种情况下,它确实是一个难题,至少与该领域的标准假设有关。但是,我怀疑你的情况比大多数人容易,因为你知道如果每个字符串,机器在开始时处于单一的开始状态。
如果查找学习有限自动机太令人沮丧,你可以抓住一些代码来安装隐马尔可夫模型,让它松散,并希望最好。
答案 2 :(得分:1)
但也许这比我想象的更常见。
答案 3 :(得分:0)
你对正则表达的直觉可能是正确的。 这是语法归纳的典型设置:诱导("查找")一组规则,允许您生成/识别一组字符串。
通常,树是可视化和操纵此类规则的良好结构。
第一个问题是:你的字符串是如此常规吗? (对这个问题的回答并不那么容易,一种可操作的方法可以是通过人工检查来看看推断的语法是否符合你的目标)。 如果你的例子结构的简单性表明这种方法,那么你可以采用常规的语法归纳法。
对于某些即用型库,请参阅: