Linguaggio specifico del dominio per la ricerca / elaborazione del testo?

3

Lavoro per un'organizzazione che lavora molto con i dati governativi. Abbiamo un paio di progetti diversi in cui abbiamo estrapolato le operazioni di ricerca / manipolazione di testo comuni in librerie riutilizzabili, per cose come standardizzare il modo in cui i nomi dei politici vengono visualizzati (ad esempio, trasformare "MCDONALD, BOB (R-VA)" in " Bob McDonald (R-VA) "), o trovare citazioni giuridiche nel testo (ad esempio, trovare un riferimento a (ad esempio, trovare occorrenze di cose come" 1 USC 7 "nel testo, determinare che si tratta di una citazione del Codice degli Stati Uniti e restituire un struttura che dice che si riferisce alla sezione 1 del titolo 7) .Queste sono operazioni relativamente semplici, e molti collaboratori nel nostro spazio vorrebbero usarle, ma finiamo per dover scegliere una lingua in cui implementare ciascuna (la prima è in Python, quest'ultimo, Javascript) e congeliamo potenziali consumatori / contributori che lavorano in lingue diverse e non vogliamo ricorrere a hack come eseguire il bombardamento su un processo di nodo per gestire il loro testo. Tutto ciò sembra un peccato perché ciò che stiamo esprimendo è così semplice, e o dovrebbe, si potrebbe pensare, essere abbastanza facile da condividere.

Quale sarebbe l'ideale sarebbe un piccolo DSL che potrebbe esprimere alcune operazioni basilari di elaborazione del testo: ricerca / sostituzione di espressioni regolari, alcune operazioni di elaborazione di elenchi come mappe e filtri e la possibilità di archiviare elementi in dati JSON-ish strutture (mappe ed elenchi) e un meccanismo per tradurre questo DSL o consentirne il consumo da parte dei linguaggi di livello superiore con i quali noi ei nostri collaboratori vogliamo lavorare (Python, JS, Ruby e PHP sono probabilmente i principali quelli). Esiste qualcosa di simile?

Ho pensato di costruirne uno io stesso ... forse una cosa dichiarativa su qualcosa come YAML, o forse un minuscolo sottoinsieme di Scheme o Lua, o forse qualcosa di completamente inventato per questo scopo. Ma volevo vedere se prima c'era già qualcosa.

    
posta Andrew Pendleton 29.03.2013 - 20:41
fonte

3 risposte

3

La lingua migliore di cui sono a conoscenza per la ricerca e l'elaborazione del testo è awk . Se awk non soddisfa le tue esigenze, è probabile che non lo farà a meno che tu non lo crei da solo.

Tuttavia, se è necessario crearne uno proprio, non è necessario iniziare completamente da zero per ciascuna lingua. Puoi utilizzare uno strumento come antlr che può essere esportato in varie lingue, o costruirlo in una lingua e utilizzare le rispettive interfacce native per accedervi da altre lingue.

    
risposta data 29.03.2013 - 22:15
fonte
1

Supponendo che la tollezza non sia un requisito del tuo DSL, potresti prendere in considerazione la definizione di una struttura di documenti JSON o XML ed evitare di inventare una nuova lingua. Questo rende l'analisi in Python, Perl e altri ambienti molto più semplice, e devono solo capire la struttura, non la sintassi.

    
risposta data 29.03.2013 - 21:40
fonte
-1

Non è necessario scrivere un DSL per questo.

L'elaborazione e la manipolazione del testo è un compito che praticamente ogni progetto di programmazione deve affrontare in un modo o nell'altro e, di conseguenza, praticamente tutti i linguaggi di programmazione più diffusi hanno capacità di elaborazione del testo.

Perl, Python, C #, ecc possono fare tutte le cose di elaborazione del testo che hai pensato, oltre agli aspetti aggiuntivi che non hai ancora pensato.

Usa la tua lingua di livello superiore.

    
risposta data 29.03.2013 - 20:49
fonte

Leggi altre domande sui tag