Analisi della lingua per trovare parole importanti


9

Sto cercando qualche input e teoria su come affrontare un argomento lessicale.

Diciamo che ho una raccolta di stringhe, che può essere solo una frase o potenzialmente più frasi. Vorrei analizzare queste stringhe e strappare le parole più importanti, forse con un punteggio che denota la probabilità che la parola sia importante.

Diamo un'occhiata ad alcuni esempi di cosa intendo.

Esempio 1:

"Voglio davvero un Keurig, ma non posso permettermene uno!"

Questo è un esempio molto semplice, solo una frase. Come umano, posso facilmente vedere che "Keurig" è la parola più importante qui. Inoltre, "permettersi" è relativamente importante, sebbene non sia chiaramente il punto principale della frase. La parola "I" appare due volte, ma non è affatto importante poiché non ci dice davvero alcuna informazione. Potrei aspettarmi di vedere un hash di parole / punteggi qualcosa del genere:

"Keurig" => 0.9
"afford" => 0.4
"want"   => 0.2
"really" => 0.1
etc...

Esempio n. 2:

"Ho appena avuto una delle migliori pratiche di nuoto della mia vita. Spero di riuscire a mantenere i miei tempi in competizione. Se solo mi fossi ricordato di prendere il mio orologio non impermeabile."

Questo esempio ha più frasi, quindi ci saranno parole più importanti in tutto. Senza ripetere l'esercitazione puntuale dell'esempio n. 1, probabilmente mi aspetto di vedere due o tre parole veramente importanti che escono da questo: "nuoto" (o "pratica del nuoto"), "competizione" e "guardare" (o "impermeabile" watch "o" watch non waterproof "a seconda di come viene gestito il trattino).

Dati un paio di esempi come questo, come faresti per fare qualcosa di simile? Ci sono librerie o algoritmi (open source) esistenti nella programmazione che già lo fanno?


Inoltre, questo è il mio primo post su programmers.stackexchange.com. Ci scusiamo se questo è il posto sbagliato e appartiene a StackOverflow o un altro sito SE. Felice di spostare la domanda, se necessario.
Matt Huggins,

Non capisco dalla domanda cosa stai cercando di realizzare. Per il primo esempio in particolare, le parole "Keurig" e "consentono" potrebbero essere identificate da un semplice controllo statistico: tra le parole della frase, queste due parole sono meno comuni in inglese delle altre. Quindi, se avessi un database di frequenze di parole, potresti identificarle facilmente.
Qwertie,

Risposte:


5

Ci sono sicuramente persone che pensano al problema che descrivi. La classifica e l'estrazione delle parole singole pertinenti nel testo (pdf) di João Ventura e Joaquim Ferreira da Silva è una bella introduzione alle tecniche di classificazione esistenti e suggerimenti per il miglioramento. Tutte le tecniche che descrivono si basano su un corpus (molto testo) rispetto a una o due righe di testo. Il tuo corpus dovrebbe essere la raccolta di tutti i campioni o possibilmente di molti corpora di campioni raccolti da fonti specifiche. Tieni presente che la pertinenza di una sola parola (unigram) è un problema irrisolto. Come descrive il documento:

"... usando metodi puramente statistici, questo tipo di classificazione non è sempre semplice o addirittura esatta perché, sebbene la nozione di pertinenza sia un concetto facilmente comprensibile, normalmente non esiste consenso sulla frontiera che separa la pertinenza dalla non pertinenza. Ad esempio, parole come "Repubblica" o "Londra" hanno una rilevanza significativa e parole come "o" e "da" non hanno alcuna rilevanza, ma che dire di parole come "leggi", "termina" e "successivo"? di parole sono problematiche perché di solito non c'è consenso sul loro valore semantico ".

Esistono molti toolkit di elaborazione del linguaggio naturale open source . (Fai attenzione. Alcuni strumenti sono gratuiti per la ricerca ma richiedono una licenza commerciale per uso commerciale.) Ti semplificheranno la vita indipendentemente dall'approccio che scegli.

Conosco molto bene il Natural Language Toolkit (NLTK) . È facile da usare, ben documentato ed è descritto nel libro, Natural Language Processing with Python (disponibile gratuitamente online). Come semplice esempio di ciò che NLTK potrebbe fare per voi, immaginare utilizzando il suo tagger parte del discorso . Con l'identificazione della parte del discorso di ogni parola, potresti considerare i nomi propri molto importanti e gli aggettivi meno. I verbi potrebbero essere importanti e gli avverbi meno. Non è affatto una classifica all'avanguardia, ma ottieni informazioni utili con poco sforzo. Quando sei pronto per passare ad analisi più sofisticate, la capacità integrata di NLTK di tokenizzare, etichettare, bloccare e classificare ti consentirà di concentrarti sugli altri dettagli della tua soluzione.


1

L'elaborazione del linguaggio naturale è la sua disciplina con molte ricerche formali fatte su di essa. Vorrei iniziare guardando lì.

Riconsidererei anche le mie esigenze. Anche dopo oltre 50 anni di ricerca, il miglior informatico che è stato in grado di inventare è Siri. Non mi aspetto che un computer faccia con successo ciò di cui stai parlando con regolarità.

Se ci sono alcune limitazioni al discorso (come Siri supponendo che tu abbia un semplice comando o una domanda) può essere migliore. Riconsiderare le mie esigenze (supponendo che io abbia bisogno della PNL) includerebbe la definizione delle mie limitazioni. Dopodiché probabilmente avrei cercato molti esempi. In parte per testare qualsiasi cosa mi venga in mente, ma molte soluzioni moderne prevedono l'apprendimento automatico. Avrei bisogno di quegli esempi come input per la curva di apprendimento.

Quindi, in sintesi, dubito seriamente che tutto sarà in grado di darti buoni punteggi in questo tipo di scenario privo di contesto.


+1 per Siri scavare ... o promozione ...
Aaron McIver
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.