Aus meiner Lektüre geht hervor, dass es bei den meisten Grammatiken darum geht, eine unendliche Anzahl von Zeichenfolgen zu erzeugen. Was ist, wenn Sie umgekehrt gearbeitet haben?
Wenn n Zeichenfolgen mit einer Länge von m angegeben werden, sollte es möglich sein, eine Grammatik zu erstellen, die diese Zeichenfolgen und nur diese Zeichenfolgen generiert.
Gibt es dafür eine bekannte Methode? Idealerweise ein Technikname, den ich erforschen kann. Wie würde ich alternativ eine Literatursuche durchführen, um eine solche Methode zu finden?
formal-languages
regular-languages
formal-grammars
finite-sets
Gustav Bertram
quelle
quelle
Antworten:
Dies fällt unter das allgemeine Thema "Grammatikinduktion"; Wenn Sie nach diesem Satz suchen, werden Sie eine Menge Literatur finden. Siehe z. B. Induzieren einer kontextfreien Grammatik , https://en.wikipedia.org/wiki/Grammar_induction , /cstheory//q/27347/5038 .
Für reguläre Sprachen (anstatt kontextfreie) siehe auch Ist Regex Golf NP-Complete? , Kleinste DFA , die Strings gegeben annimmt und verwirft andere gegebenen Strings , Gibt es Verbesserungen auf Dana Angluin Algorithmus für reguläre Sätze zu lernen , und /cstheory//q/1854/5038 .
quelle
quelle
Es gibt viele Möglichkeiten, daher müssen Sie der Qualität der Ergebnisse zusätzliche Kriterien auferlegen.
quelle
Was Sie fragen, ähnelt einem Suchindex. In der Tat können Finite-State-Wandler erstellt und verwendet werden, um ihnen zugeführten Text zu erkennen. Zum Beispiel verwendet Lucene diesen Algorithmus: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698
Für eine praktische Anwendung lesen Sie diesen Blog-Beitrag von Andrew Gallant: Index 1.600.000.000 Schlüssel mit Automaten und Rost
In dem Beitrag beschreibt er eine Methode, um eine FSA mit einem Textkorpus so zu konstruieren, dass alle Wörter erkannt werden. Das Endergebnis ist die Erstellung einer ungefähr minimalen FST aus vorsortierten Schlüsseln in linearer Zeit und in konstantem Speicher.
Die Implementierung ist in seiner
fst
Bibliothek verfügbar : https://github.com/BurntSushi/fstquelle
Eine Antwort auf die Frage von reinierpost, die auch die ursprüngliche Frage beantwortet:
Wir konstruieren den Wörterbuchautomaten wie folgt:
Die maximale Größe des Automaten ist die Gesamtlänge der Eingabezeichenfolgen. Angenommen, Sie können Übergänge simulieren und in konstanter Zeit neue erstellen, dann ist auch die Laufzeit die Gesamtlänge der Eingabezeichenfolgen. Keine besten oder schlechtesten Fälle.
Dieser Automat ist minimal. Da im regulären Fall Automaten und Grammatiken fast eins zu eins entsprechen, gilt dies auch für die Grammatik. Natürlich ist es unmöglich, etwas der Größe n in weniger als n Zeit zu konstruieren.
quelle