有限の有限の文字列セットを指定して文法を構築する既知の方法はありますか?


10

私の読書から、ほとんどの文法は無数の文字列を生成することに関係しているようです。逆に作業するとどうなりますか?

長さがmのn個の文字列が指定されている場合、それらの文字列を生成する文法を作成し、それらの文字列だけを作成することが可能です。

これを行うための既知の方法はありますか?理想的には、私が研究できる技術名です。あるいは、そのような方法を見つけるために文献検索をどのように行えばよいでしょうか?


5
簡単:文字列のBNFテーブルを作成します。
ジョシュア

文字列は定義により有限です。そして、それについての有限な説明がない限り、あなたは無限のセットを「与えられる」ことはできません。
フォンブランド、

回答:


11

これは「文法誘導」の一般的なトピックに含まれます。その語句を検索すると、大量の文献が表示されます。例えば、参照文脈自由文法誘導https://en.wikipedia.org/wiki/Grammar_inductionhttps://cstheory.stackexchange.com/q/27347/5038を

(文脈自由な言語ではなく)通常の言語について、「正規表現ゴルフはNP完全ですか?」も参照してください指定された文字列を受け入れ他の指定された文字列を拒否する最小のDFA、通常のセットを学習するためのDana Angluinのアルゴリズム、およびhttps://cstheory.stackexchange.com/q/1854/5038 に改善点があります


おそらく無限の通常言語の文法を生成することは難しく、この問題とはかなり異なります。
reinierpost 2016

私はこの質問に正しいマークを付けています。なぜなら、質問に直接答えることはできませんが(これは述べられているように簡単に解決できることがわかります)、さらに調査する必要がある種類の用語を提供します。
グスタフベルトラム

8

S={s1,s2....sm}AAs1|s2|...sn


解析用の教科書を見直す必要があると思います。振り返ってみると、この答えは明白なようです。ありがとうございました!
グスタフベルトラム

3

方法はたくさんあるので、結果の品質に追加の基準を課す必要があります。

  1. wSwS
  2. wXww1xw2xXw1xXw2wXwϵXϵ
  3. 接尾辞ツリー:同じ、逆。
  4. 最小限のサイズの文法を生成することが保証されたアルゴリズムの適用。これがどれほど難しいかわかりません。

はい、最初の回答の後、私が追加の基準を課す必要があることは明らかでしたが、最初の回答の後に質問を変更するのは不公平だと感じました。
グスタフベルトラム

それでも、与えられた有限の文字列セットの最小文法を見つけることの時間の複雑さを知りたいと思います...たとえば、文字列の全長、または結果の全長で言いましょう。
reinierpost 2016

3

あなたが求めていることは検索インデックスに似ています。実際、有限状態トランスデューサを作成して、それらに送られるテキストを認識するために使用できます。たとえば、Luceneは次のアルゴリズムを使用します。http://citeseerx.ist.psu.edu/viewdoc/summary?doi = 10.1.1.24.3698

実用的な使用については、Andrew Gallantによるこのブログ投稿をチェックしてください: AutomataとRustを使用したインデックス1,600,000,000キー

この記事では、すべての単語を認識できるようにテキストのコーパスを指定してFSAを構築する方法について説明しています。最終結果は、事前にソートされたキーから、線形時間および一定のメモリで、ほぼ最小限のFSTを構築することです。

FSA共有の接頭辞と接尾辞

実装は彼のfstライブラリで利用可能です:https : //github.com/BurntSushi/fst


1

元の質問にも答えるreinierpostによって提起された質問への回答:

辞書オートマトンは次のように作成します。

  1. 最初の文字列を正確に読み取り、受け入れるオートマトンを作成します。
  2. 次の文字列については、オートマトンでそれを読み始め、ある文字について遷移がなくなるまで続けます。残りの文字列に対して新しいブランチを開始します。すべての文字列が処理されるまで繰り返す

オートマトンの最大サイズは、入力文字列の全長です。トランジションをシミュレートし、一定の時間で新しいトランジションを作成できると仮定すると、ランタイムも入力文字列の全長です。最良または最悪のケースはありません。

このオートマトンは最小限です。通常の場合、オートマトンと文法はほぼ1対1で対応しているため、文法についても同じことが言えます。もちろん、n時間未満でサイズnの何かを構築することはできません。


ありがとう。この質問への回答に関する限り、これがレイニエポストに貢献することはわかりません。また、別の回答に応答したりコメントしたりする回答は必要ありません。これはディスカッションフォーラムではありません。そのための方法は、新しい質問を投稿してから、自分で回答することです。私はそれが明白でないかもしれないことを理解しています。[とはいえ、あなたの回答がreinierpostが興味を持っていた問題にどのように答えるかはわかりません。reinierpostの答えの最後の問題は、最小数のルールで文法を見つけることでした。あなたの答えは、最小限の状態でDFAを構築する方法を示しています。(続き)
DW

1
もちろん、そのDFAを通常の文法に変換することはできますが、文法内のルールの数の点で最小になると思うのはなぜですか。証明が必要なようです。]
DW

私の答えが貢献しているのはランタイムだと思います。あなたが正しい、私が言ういくつかのことはいくつかの証拠が必要になるでしょう。しかし、有限オートマトンの遷移と通常の文法規則の間の対応は、私にとって非常に明確です(後者がほとんどの定義のように規則ごとに1つの端子しか生成できない場合)。次に、私の文法よりも小さい文法は、最小のオートマトンよりも小さいオートマトンを提供します。だから私はミニマルオートマトンからの文法(私のものはミニマルであることを証明していません)もミニマルになると思います。-回答に関するアドバイスを心に留めておきます。ありがとう
Peter Leupold

DFAの最小性の概念は、状態の数に関するものです。これは、DFA の遷移の数に関して最小限であること、または結果として生じる文法のルール数の最小限であることを意味しますか?私はあなたのメトリックが何であるかを追跡する必要があると思います、そうでなければ私はリンゴをオレンジと比較するのではないかと心配しています。
DW

正しい、文法は非終端に関しては最小限になります。ルールについては、これは明確ではありません。
Peter Leupold、2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.