Kann ein Earley Parser zu einem Fuzzy-Parser gemacht werden, der dem Levenshtein Automata Algo für DFA ähnelt?


10

Es gibt eine Möglichkeit, Fuzzy-Parsing durchzuführen (akzeptiert Zeichenfolgen auch bei Tippfehlern bis zu einer bestimmten Bearbeitungsentfernung), mit einem DFA und einer zur Laufzeit erstellten Levenshtein-Automaten des Eingabeworts. Kann etwas Ähnliches mit einem Earley-Parser gemacht werden? Es fällt mir schwer, den Algorithmus zu verstehen, geschweige denn diese Frage zu beantworten.


1
Nun, PDAs sind gegen viele Operationen mit NFA geschlossen, daher sollte dies im Prinzip möglich sein. Das Anpassen von Earley scheint eine rote Übung zu sein, da wir in Gegenständen Zähler verwenden dürfen. Vermisse ich etwas
Raphael

@ Raphael Ja Dies ist die allgemeine Idee. Meine Antwort ist länger, da es schwierig ist zu beurteilen, was Benutzer wissen oder nicht wissen.
Babou

Bitte zitieren Sie eine Referenz / Skizze für "Levenshtein Automata". Kennen Sie eine, die sich qualifizieren könnte, aber auf welche beziehen Sie sich?
vzn

Antworten:


8

Die Antwort ist ja. Mit einem Earley-Parser würde ich das jedoch nicht tun, da es einfachere mit denselben Funktionen gibt.

Grundsätzlich gehört der Earley-Parser zu einer Familie allgemeiner kontextfreier Parser, die alle möglichen Parses für eine bestimmte Zeichenfolge erzeugen, wenn die Grammatik nicht eindeutig ist.

Es gibt (zumindest) zwei Möglichkeiten, diese Parser zu verstehen:

  • als dynamische Programmierinterpretation eines Pushdown-Automaten entsprechend der Grammatik auf der Eingabezeichenfolge;

  • als die Konstruktion des Schnittpunkts der Grammatik mit einem endlichen Automaten.

Beim Parsen einer einzelnen Zeichenfolge ist der zu berücksichtigende endliche Zustandsautomat ein linearer Automat, der nur die zu analysierende Zeichenfolge symbolweise erkennt (Anzahl der Zustände ist ). Wenn Sie die produktübergreifende Konstruktion eines FA und eines CF-Garmmar anwenden (Bar Hillel, Perlis, Shamir 1961), erhalten Sie eine neue CF-Grammatik, die eine neue Grammatik , die . Der interessante Punkt, der normalerweise übersehen wird, ist, dass die von verwendeten bis zur Umbenennung ohne Terminals (aufgrund des Kreuzprodukts) beibehält.w|w|+1AGFL(A)L(G)FG

Wenn also FA nur Ihre Eingabezeichenfolge generiert, generiert die Grammatik nur diese Zeichenfolge (wenn sie sich in , andernfalls wird die leere Sprache generiert ). Außerdem generiert es es mit allen Analysebäumen, mit denen es generieren könnte.AFL(G)G

Diese Grammatik wird normalerweise als Shared Parse Forest bezeichnet , und alle allgemeinen CF-Parsing-Algorithmen sind eine mehr oder weniger optimierte Version der produktübergreifenden Konstruktion, unabhängig davon, ob es sich um CYK, Earley, generalisierte LR oder LL oder andere handelt. Alles, was ich sage, gilt also auch für sie.F

Wie Sie sehen, verallgemeinert sich dies jedoch auf das Parsen eines ganzen regulären Satzes, wenn jemand daran interessiert ist.

Das ist genau deine Frage. Sie haben eine Zeichenfolge . Sie möchten es bis zu einigen Variationen analysieren, die von einem Wandler mit endlichem Zustand definiert werden. In Ihrem Fall handelt es sich um einen Wandler, der alle Zeichenfolgen innerhalb eines bestimmten Levenshtein-Editierabstands von (der Ursprung des Wandlers ist jedoch unerheblich). Die Menge dieser Zeichenfolgen ist eine reguläre Menge, die von einem FA definiert werden kann, mit einem gewichteten Übergang, der den Bearbeitungsabstand jeder Zeichenfolge berechnen kann.ww

Wenn Sie das Kreuzprodukt mit Ihrer Grammatik ausführen, erhalten Sie eine gemeinsame Analysewald-Grammatik , die alle Zeichenfolgen in der Schnittmenge generiert. Darüber hinaus erhalten Sie die Gewichte für einige der Regeln, sodass Sie den Bearbeitungsabstand für jede der akzeptierten Zeichenfolgen berechnen können.GF

Falls gewünscht, kann dies verwendet werden, um nur die Saiten mit minimalem Abstand zu halten.

Dies kann jedoch ein wenig verbessert werden, da die Zusammensetzung mit endlichen Zustandsmaschinen assoziativ ist.

Wenn Sie immer denselben Finite-State-Wandler verwenden, wie dies in Ihrer Frage der Fall ist, besteht der richtige Weg darin, die Grammatik und den Wandler (hier den Levenshtein-Automaten) unabhängig von der Eingabezeichenfolge zu komponieren . Dies gibt Ihnen eine gewichtete Grammatik, mit der Sie die Eingabezeichenfolge analysieren können . Das Problem ist, dass das Parsen mit der brutalen Kreuzungskonstruktion Zeichenfolgen in jeder Levenshtein-Entfernung ergibt, dh .GwΣ

Es wäre leicht, diese Konstruktion zu beschneiden, um das gleiche Ergebnis wie zuvor zu erzielen, aber der beste Weg ist eine kontrollierte Kreuzungskonstruktion, wie die dynamische Programmierorganisation, die von den meisten Parsern in der Literatur verwendet wird, einschließlich Earleys, und sie zu verwenden, um das Generieren zu vermeiden nutzlose Regel durch Berechnen von Entfernungen und Abbrechen eines Rechenpfads, wenn dieser den gewünschten Schwellenwert überschreitet. Dynamische Programmierung kann auch verwendet werden, um die Analyse-Gesamtstruktur (oder den Analyse-Baum) für die Zeichenfolge, die den kürzesten Abstand zur Eingabe hat, direkt zu berechnen.


Ich denke, das ist hilfreich, aber vielleicht auch "zu viel lesen" in der Frage, so dass etwas wie "das ist genau deine Frage" nicht wirklich genau sein kann. Sie haben eine ziemlich vage Frage gestellt, die nicht streng formalisiert ist, und (versucht?) sie selbst zu formalisieren. Es gibt wahrscheinlich mehr als einen Weg, die ursprüngliche, etwas vage Idee zu formalisieren. Ich denke, es könnte hilfreich sein, zunächst sorgfältig zu definieren, was die Levenshtein-DFA-Konstruktionen tun (es sind einige bekannt / untersucht, aber über welche sprechen wir?) und dann zu erklären, wie dieses Konzept auf CFLs verallgemeinert werden könnte.
vzn

1
Ich gebe tatsächlich verschiedene Formalisierungen, die sich ergänzen. Es gibt Feinheiten, auf die ich nicht eingegangen bin, wie beispielsweise die genaue Verwendung von Gewichten im Prozess, die vom genauen Ergebnis abhängt, das Sie erhalten möchten. Mein Ziel ist es nicht nur, eine Antwort zu geben, die wenig Interesse an meiner eigenen Meinung hat, sondern ein umfassenderes Verständnis des Problems zu vermitteln. Die Wahl des verwendeten Bearbeitungsabstands ist unerheblich. Er funktioniert für alles, was mit einem gewichteten Finite-State-Wandler ausgedrückt werden kann.
Babou
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.