Domanda

Sto facendo un sacco di elaborazione del linguaggio naturale con un bit requisiti non resistenti. Spesso ottengo compiti simili a Lemmatization - Data una parola (o solo un pezzo di testo) Ho bisogno di trovare alcuni modelli e trasformare la parola in qualche modo. Ad esempio, potrei aver bisogno di correggere le erogazione di errori, ad es. Dato la parola "mangiare" ho bisogno di trasformarlo per "mangiare". O potrei aver bisogno di trasformare le parole "Ahahaha", "Ahahahaha", ecc. A solo "Ahaha" e così via.

Quindi sto cercando un attrezzo generico che consente di definire Regole di transformazione per tali casi. Le regole possono sembrare qualcosa del genere:

 {w}in   ->  {w}ing
 aha(ha)+  ->  ahaha
.

È necessario essere in grado di utilizzare modelli catturati dal lato sinistro sul lato destro.

Lavoro con i linguisti che non conoscono affatto la programmazione, quindi idealmente Questo strumento dovrebbe usare File esterni e Semplice lingua per le regole .

Sto facendo questo progetto in Clojure, quindi idealmente Questo strumento dovrebbe essere una biblioteca per una delle lingue JVM (Java, Scala, Clojure), ma anche altre lingue o strumenti di comando. .

Ci sono diversi progetti NLP molto interessanti, tra cui gate , stanford corenlp , nltk E altri, e non sono esperto in tutti loro, quindi potrei perdere lo strumento di cui ho bisogno. Se è così, per favore fammi sapere.

Nota, che sto lavorando con diverse lingue ed esegue compiti molto diversi, così lemmatizzatori di calcestruzzo, steemmers, i correttori errati e così via per le lingue concrete non si adattano alle mie esigenze - ho davvero bisogno di uno strumento più generico.

Uper. Sembra che io abbia bisogno di fornire alcuni dettagli / esempi di ciò di cui ho bisogno.

Fondamentalmente, ho bisogno di una funzione per la sostituzione del testo da parte di qualche tipo di regex (simile al String.replaceAll()tagcode di Java) ma con possibilità di Usa il testo catturato nella stringa di sostituzione . Ad esempio, nel testo del mondo reale persone spesso ripetono personaggi per fare enfasi su una particolare parola, ad es. Alcunoone può scrivere "Questo film è Soooo Boooring ...". Devo essere in grado di sostituire questi "oooo" ripetitivi con un solo carattere singolo. Quindi potrebbe esserci una regola come questa (in sintassi simile a ciò che ho usato in precedenza in questo post):

{chars1}<char>+{chars2}?  ->  {chars1}<char>{chars2}
.

cioè, sostituire la parola che inizia con alcuni caratteri (chars1), almeno 3 caratteri e possibilmente terminando con alcuni altri caratteri (chars2) con una stringa simile, ma con solo un singolo. Punto chiave qui è che catturaremo sul lato sinistro di una regola e lo usiamo sul lato destro.

È stato utile?

Soluzione

I've found http://userguide.icu-project.org/transforms/general to be useful as well for some general pattern/transform tasks like this, ignore the stuff about transliteration, its nice for doing a lot of things.

You can just load up rules from a file into a String and register them, etc.

http://userguide.icu-project.org/transforms/general/rules

Altri suggerimenti

I am not an expert in NLP, but I believe Snowball might be of interest to you. Its a language to represent stemming algorithms. Its stemmer is used in the Lucene search engine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top