私の読書から、ほとんどの文法は無数の文字列を生成することに関係しているようです。逆に作業するとどうなりますか?
長さがmのn個の文字列が指定されている場合、それらの文字列を生成する文法を作成し、それらの文字列だけを作成することが可能です。
これを行うための既知の方法はありますか?理想的には、私が研究できる技術名です。あるいは、そのような方法を見つけるために文献検索をどのように行えばよいでしょうか?
私の読書から、ほとんどの文法は無数の文字列を生成することに関係しているようです。逆に作業するとどうなりますか?
長さがmのn個の文字列が指定されている場合、それらの文字列を生成する文法を作成し、それらの文字列だけを作成することが可能です。
これを行うための既知の方法はありますか?理想的には、私が研究できる技術名です。あるいは、そのような方法を見つけるために文献検索をどのように行えばよいでしょうか?
回答:
これは「文法誘導」の一般的なトピックに含まれます。その語句を検索すると、大量の文献が表示されます。例えば、参照文脈自由文法誘導、https://en.wikipedia.org/wiki/Grammar_induction、https://cstheory.stackexchange.com/q/27347/5038を。
(文脈自由な言語ではなく)通常の言語については、「正規表現ゴルフはNP完全ですか?」も参照してください。、指定された文字列を受け入れ、他の指定された文字列を拒否する最小のDFA、通常のセットを学習するためのDana Angluinのアルゴリズム、およびhttps://cstheory.stackexchange.com/q/1854/5038 に改善点があります。
方法はたくさんあるので、結果の品質に追加の基準を課す必要があります。
あなたが求めていることは検索インデックスに似ています。実際、有限状態トランスデューサを作成して、それらに送られるテキストを認識するために使用できます。たとえば、Luceneは次のアルゴリズムを使用します。http://citeseerx.ist.psu.edu/viewdoc/summary?doi = 10.1.1.24.3698
実用的な使用については、Andrew Gallantによるこのブログ投稿をチェックしてください: AutomataとRustを使用したインデックス1,600,000,000キー
この記事では、すべての単語を認識できるようにテキストのコーパスを指定してFSAを構築する方法について説明しています。最終結果は、事前にソートされたキーから、線形時間および一定のメモリで、ほぼ最小限のFSTを構築することです。
実装は彼のfst
ライブラリで利用可能です:https : //github.com/BurntSushi/fst
元の質問にも答えるreinierpostによって提起された質問への回答:
辞書オートマトンは次のように作成します。
オートマトンの最大サイズは、入力文字列の全長です。トランジションをシミュレートし、一定の時間で新しいトランジションを作成できると仮定すると、ランタイムも入力文字列の全長です。最良または最悪のケースはありません。
このオートマトンは最小限です。通常の場合、オートマトンと文法はほぼ1対1で対応しているため、文法についても同じことが言えます。もちろん、n時間未満でサイズnの何かを構築することはできません。