Estrazione entità / riconoscimento con strumenti gratuiti durante l'alimentazione Lucene Index
Attualmente sto studiando le opzioni per estrarre nomi di persona, posizioni, parole tecniche e categorie dal testo (molti articoli dal web) che verranno poi inseriti in un indice Lucene/ElasticSearch. Le informazioni aggiuntive vengono quindi aggiunte come metadati e dovrebbero aumentare la precisione della ricerca.
Ad esempio quando qualcuno interroga 'wicket' dovrebbe essere in grado di decidere se intende lo sport del cricket o il progetto Apache. Ho cercato di implementarlo da solo con un successo minore quindi lontano. Ora ho trovato molti strumenti, ma non sono sicuro se sono adatti per questo compito e quali di essi si integrano bene con Lucene o se la precisione dell'estrazione di entità è abbastanza alta.
- Dbpedia Spotlight , la demo sembra molto promettente
- OpenNLP richiede formazione . Quali dati di allenamento utilizzare?
- OpenNLP strumenti
- Stanbol
- NLTK
- balie
- UIMA
- CANCELLO -> codice di esempio
- Per maggiori informazioni:
]} - Stanford CRF-NER
- maui-indicizzatore
- Martello
- Illinois Denominato Entity Tagger Non open source ma gratuito
- dati wikipediani
Il mio traccia smal:
- Qualcuno ha esperienza con alcuni degli strumenti elencati sopra e la sua precisione / richiamo? O se ci sono dati di allenamento richiesti + disponibili .
- Ci sono articoli o tutorial in cui posso iniziare con entity extraction(NER) per ogni strumento?
- Come possono essere integrati con Lucene?
Ecco alcune domande relative a tale argomento:
4 answers
Il problema che stai affrontando nell'esempio 'wicket' si chiama entità disambiguazione, non entità estrazione/riconoscimento (NER). NER può essere utile ma solo quando le categorie sono abbastanza specifiche. La maggior parte dei sistemi NER non ha una granularità sufficiente per distinguere tra uno sport e un progetto software (entrambi i tipi esulerebbero dai tipi tipicamente riconosciuti: persona, organizzazione, posizione).
Per la disambiguazione, hai bisogno di una knowledge base rispetto alle entità disambigua. DBpedia è una scelta tipica grazie alla sua ampia copertura. Vedi la mia risposta per Come usare DBpedia per estrarre tag/Parole chiave dal contenuto?{[6] } dove fornisco ulteriori spiegazioni e menziono diversi strumenti per la disambiguazione tra cui:
- Zemanta
- Indicizzatore di Maui
- Dbpedia Spotlight
-
Extractiv (la mia azienda)
Questi strumenti usano spesso un'API indipendente dalla lingua come REST, e io no sappi che forniscono direttamente supporto Lucene, ma spero che la mia risposta sia stata utile per il problema che stai cercando di risolvere.
È possibile utilizzare OpenNLP per estrarre i nomi di persone, luoghi, organizzazioni senza formazione. Basta usare modelli pre-esistenti che possono essere scaricati da qui: http://opennlp.sourceforge.net/models-1.5 /
Per un esempio su come utilizzare uno di questi modelli vedere: http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind
Rosoka è un prodotto commerciale che fornisce un calcolo di "Salienza" che misura l'importanza del termine o entità al documento. La salienza si basa sull'uso linguistico e non sulla frequenza. Utilizzando i valori di salienza è possibile determinare l'argomento principale del documento nel suo complesso. L'output è nella tua scelta di XML o JSON che lo rende molto facile da usare con Lucene. È scritto in java. C'è una versione di Amazon Cloud disponibile all'indirizzo https://aws.amazon.com/marketplace/pp/B00E6FGJZ0. Il costo per provarlo è 0 0,99/ora. La versione di Rosoka Cloud non ha tutte le funzionalità API Java disponibili che il Rosoka completo. Sì, entrambe le versioni eseguono l'entità e il termine disambiguazione in base all'uso linguistico.
La disambiguazione, umana o software, richiede che ci siano abbastanza informazioni contestuali per essere in grado di determinare la differenza. Il contesto può essere contenuto all'interno del documento, all'interno di un vincolo corpus, o nel contesto degli utenti. Il primo è più specifico e il secondo ha la maggiore ambiguità potenziale. Cioè digitando la parola chiave "wicket" in una ricerca su Google, potrebbe riferirsi a cricket, Apache software o al personaggio Ewok di Star Wars (cioè un'Entità). Il generale La frase "Il wicket è custodito dal battitore" ha indizi contestuali all'interno della frase per interpretarlo come un oggetto. "Wicket Wystri Warrick era un maschio Ewok scout" dovrebbe enterpret " Wicket "come il nome dato dell'entità persona"Wicket Wystri Warrick". "Welcome to Apache Wicket" ha gli indizi contestuali che "Wicket" fa parte di un nome di luogo, ecc.
Ultimamente ho armeggiato con Stanford crf ner. Hanno rilasciato un bel paio di versioni http://nlp.stanford.edu/software/CRF-NER.shtml
La cosa buona è che puoi addestrare il tuo classificatore. Si dovrebbe seguire il link che ha le linee guida su come addestrare il proprio NER. http://nlp.stanford.edu/software/crf-faq.shtml#a Sfortunatamente, nel mio caso, le entità nominate non vengono estratte in modo efficiente dal documento. La maggior parte delle entità passa inosservata.
Nel caso in cui lo trovi utile.