Un Earley Parser può essere trasformato in un parser fuzzy simile al Levenshtein Automata Algo per DFA?


10

C'è un modo per eseguire l'analisi fuzzy (accetta le stringhe anche con errori di battitura a una certa distanza di modifica), con un DFA e un Automi Levenshtein costruito in fase di esecuzione della parola di input. Si può fare qualcosa di simile con un parser Earley? Sto trovando difficile capire l'algoritmo, figuriamoci rispondere a questa domanda.


1
Bene, i PDA sono chiusi contro molte operazioni con NFA, quindi questo dovrebbe essere possibile in linea di principio. Adattare Earley sembra essere un esercizio di routine, poiché ci è permesso usare un segnalino negli oggetti. Mi sto perdendo qualcosa?
Raffaello

@Raphael Sì Questa è l'idea generale. La mia risposta è più lunga, poiché è difficile valutare ciò che gli utenti sanno o non sanno.
babou,

per favore cita un ref / sketch defn per "Levenshtein Automata". ne conosci uno che potrebbe qualificarsi, ma a quale ti riferisci?
vzn

Risposte:


8

La risposta è si. Tuttavia non lo farei con un parser Earley perché ce ne sono di più semplici con le stesse capacità.

Fondamentalmente, il parser Earley appartiene a una famiglia di parser generici senza contesto, che produce tutte le analisi possibili per una data stringa, quando la grammatica è ambigua.

Esistono due modi (almeno) per comprendere questi parser:

  • come interpretazione di programmazione dinamica di un automa pushdown corrispondente alla grammatica sulla stringa di input;

  • come la costruzione dell'intersezione della grammatica con un automa a stati finiti.

w|w|+1UNsolFL(UN)L(sol)Fsol, fino alla ridenominazione non terminale (a causa del prodotto incrociato).

UNFL(sol)sol

F

Ma, come vedi, questo generalizza l'analisi di un intero set regolare, se qualcuno è interessato a farlo.

ww

solF

Se lo si desidera, questo può essere usato per mantenere solo le stringhe con una distanza minima.

Tuttavia, questo può essere leggermente migliorato poiché la composizione con macchine a stati finiti è associativa.

solwΣ*

Sarebbe facile potare quella costruzione per ottenere lo stesso risultato di prima, ma il modo migliore è una costruzione di intersezione più controllata, come l'organizzazione dinamica di programmazione usata dalla maggior parte dei parser in letteratura, inclusa Earley, e usarla per evitare di generare regola inutile calcolando le distanze e interrompendo qualsiasi percorso computazionale quando supera la soglia desiderata. La programmazione dinamica può anche essere utilizzata per calcolare direttamente la foresta di analisi (o albero di analisi) per la stringa che ha la distanza più breve dall'input.


penso che sia utile, ma forse anche "leggere troppo" nella domanda, quindi dire qualcosa come "questa è precisamente la tua domanda" non può essere davvero preciso. hai fatto una domanda piuttosto vaga non strettamente formalizzata e (hai tentato di?) formalizzarla tu stesso. esiste probabilmente più di un modo per formalizzare l'idea in qualche modo vaga. penso che possa essere utile definire con attenzione cosa fanno le costruzioni DFA di Levenshtein (ce ne sono alcune conosciute / indagate, ma di quali stiamo parlando?) e quindi spiegare come questo concetto potrebbe essere generalizzato ai CFL.
vzn

1
In realtà do diverse formalità, che si completano a vicenda. Ci sono sottigliezze in cui non sono entrato, come l'uso esatto dei pesi nel processo, che dipende dal risultato preciso che si desidera ottenere. Il mio scopo non è solo quello di dare una risposta che abbia scarso interesse per la mia opinione, ma di dare una più ampia comprensione del problema. La scelta della distanza di modifica utilizzata è irrilevante, funziona per tutto ciò che può essere espresso con un trasduttore di stato finito ponderato.
babou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.