Answers:
这属于“语法归纳”的一般主题;在该词组上进行搜索将获得大量文学作品。见,例如,诱导上下文无关文法,https://en.wikipedia.org/wiki/Grammar_induction,https://cstheory.stackexchange.com/q/27347/5038。
对于常规语言(而不是上下文无关的语言),另请参阅regex golf NP-Complete吗?,最小DFA是接受给定的字符串,并拒绝其他给予弦,有没有对戴纳·安格卢的算法改进学习正则集,和https://cstheory.stackexchange.com/q/1854/5038。
有很多方法,因此您需要对结果的质量强加其他标准。
您要问的是类似于搜索索引。实际上,可以创建有限状态传感器,并将其用于识别输入给它们的文本。例如,Lucene使用以下算法:http ://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698
实际使用时,请查看Andrew Gallant撰写的此博客文章: 索引1,600,000,000具有自动机和Rust的键
在文章中,他描述了一种在给定文本语料库的情况下构造FSA的方法,以便它可以识别所有单词。最终结果是根据线性时间和恒定内存中的预排序键构建大约最小的FST。
该实现在他的fst
库中可用:https : //github.com/BurntSushi/fst
reinierpost提出的问题的答案,它也回答了原始问题:
我们按以下方式构造字典自动机:
自动机的最大大小是输入字符串的总长度。假设您可以模拟转换并在恒定时间内创建新转换,则运行时也是输入字符串的总长度。没有最好或最坏的情况。
这个自动机是最小的。因为在正常情况下,自动机和语法几乎是一一对应的,所以语法也是如此。当然,不可能在少于n的时间内构造大小为n的东西。