2009-07-17 15 views
10

Mi rendo conto che questo è un argomento ampio, ma sto cercando un buon primer sull'analisi del significato del testo, idealmente in Python. Per fare un esempio di quello che sto cercando di fare, se un utente fa un blog post come:Analisi del significato dal testo

"Manny Ramirez fa il suo ritorno per il Dodgers oggi contro la Houston Astros",

che cosa è un leggero/modo semplice per ottenere i nomi da una frase? Per iniziare, penso che lo limiterei ai nomi propri, ma non vorrei limitarmi a questo (e non voglio fare affidamento su una semplice regex che presuppone che Title Capped sia un nome proprio).

Per rendere questa domanda ancora peggiore, quali sono le cose che non sto chiedendo che dovrei essere? Ho bisogno di un corpus di parole esistenti per iniziare? Che materiale di analisi lessicale devo sapere per fare in modo che funzioni? Mi sono imbattuto in one other question sull'argomento e sto scavando attraverso quelle risorse ora.

risposta

8

Utilizzare i NLTK, in particolare chapter 7 on Information Extraction.

Tu dici che si desidera estrarre significato, e ci sono i moduli per l'analisi semantica, ma penso che IE è tutto ciò che serve - e onestamente una delle le uniche aree dei computer con tecnologia NLP sono in grado di gestire proprio ora.

Vedere le sezioni 7.5 e 7.6 sugli argomenti secondari di nome riconoscimento dell'entità (per pezzo e categorizzare Manny Ramerez come persona, Dodgers come organizzazione sportiva, e Houston Astros come un'altra organizzazione sportiva, o comunque sia pertinente al dominio) e il rapporto di estrazione . È disponibile un chunker NER che è possibile eseguire il plug-in una volta installato NLTK. Dal loro esempio, estraendo un'entità geo-politica (GPE) e una persona:

>>> sent = nltk.corpus.treebank.tagged_sents()[22] 
>>> print nltk.ne_chunk(sent) 
(S 
    The/DT 
    (GPE U.S./NNP) 
    is/VBZ 
    one/CD 
    ... 
    according/VBG 
    to/TO 
    (PERSON Brooke/NNP T./NNP Mossman/NNP) 
    ...) 

Nota avrai ancora bisogno di sapere tokenizzazione e tagging, come discusso nei capitoli precedenti, per ottenere il testo nel formato giusto per questi compiti di IE.

10

È necessario guardare il Natural Language Toolkit, che è esattamente per questo genere di cose.

Questa sezione del manuale appare molto rilevante: Categorizing and Tagging Words - ecco un estratto:

>>> text = nltk.word_tokenize("And now for something completely different") 
>>> nltk.pos_tag(text) 
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), 
('completely', 'RB'), ('different', 'JJ')] 

Qui vediamo che e è CC, una congiunzione di coordinamento; ora e completamente sono RB o avverbi; per è IN, una preposizione; qualcosa di è NN, un nome; e diverso è JJ, un aggettivo.

1

Questo è un argomento davvero molto complicato. Generalmente, questo genere di cose rientra nella categoria di Natural Language Processing e tende a essere alquanto complicato. La difficoltà di questo tipo di cose è proprio il motivo per cui non esiste ancora un sistema completamente automatizzato per la gestione del servizio clienti e simili.

Generalmente, l'approccio a questa roba dipende VERAMENTE dal dominio del problema. Se sei in grado di analizzare il dominio del problema, puoi ottenere alcuni benefici molto seri; per usare il tuo esempio, se sei in grado di determinare che il tuo dominio del problema è il baseball, allora questo ti dà un vantaggio notevole. Anche allora, è MOLTO lavoro per ottenere qualcosa di particolarmente utile.

Per quello che vale, sì, un corpus di parole esistente sarà utile. Ancora più importante, la determinazione della complessità funzionale attesa dal sistema sarà critica; hai bisogno di analizzare semplici frasi o c'è bisogno di analizzare un comportamento complesso? Riesci a limitare gli input a un set relativamente semplice?

3

Quello che vuoi è chiamato chunking NP (frase nominale), o estrazione.

Some links here

Come sottolineato, questa è roba specifica molto dominio del problema. Quanto più lo si può restringere, tanto più efficace sarà. E dovrai allenare il tuo programma sul tuo dominio specifico.

4

Ecco il libro mi sono imbattuto su di recente: Natural Language Processing with Python

+0

Ha, l'ho appena aggiunto al mio carrello su Amazon prima di tornare qui. Va bene? Mi stavo chiedendo la mancanza di recensioni. – Tom

+0

Sembra che abbia una descrizione abbastanza decente di NTLK - toolkit menzionato in una delle risposte – zakovyrya

7

Natural Language Processing (NLP) è il nome per l'analisi, beh, il linguaggio naturale.Esistono molti algoritmi ed euristica, ed è un campo di ricerca attivo. Qualunque algoritmo codifichi, dovrà essere addestrato su un corpus. Proprio come un essere umano: impariamo una lingua leggendo il testo scritto da altre persone (e/o ascoltando frasi pronunciate da altre persone).

In termini pratici, date un'occhiata allo Natural Language Toolkit. Per una base teorica di ciò che stai per programmare, potresti voler dare un'occhiata a Foundations of Statistical Natural Language Processing da Chris Manning e Hinrich Schütze.

alt text http://nlp.stanford.edu/fsnlp/fsnlp-bigger.jpg

+1

Questo libro è un ottimo primer per i concetti intorno alla PNL statistica! –

-1

Le espressioni regolari possono aiutare in alcuni scenari. Ecco un esempio dettagliato: What’s the Most Mentioned Scanner on CNET Forum, che utilizzava un'espressione regolare per trovare tutti gli scanner citati nei post del forum CNET.

Nel post, un'espressione regolare come tale è stato utilizzato:

(?i)((?:\w+\s\w+\s(?:(?:(?:[0-9]+[a-z\-]|[a-z]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one)\s(\w+\s){0,1}(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner))|(?:(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner)\s(\w+\s){1,2}(?:(?:(?:[0-9]+[a-z\-]|[a-z]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one))) 

al fine di corrispondere una delle seguenti operazioni:

  • due parole, quindi il numero di modello (comprese tutte-in- uno), poi “scanner”
  • “scanner”, quindi una o due parole, poi il numero di modello (compresi all-in-one)

Di conseguenza, il testo estratto dal post era come,

  1. interrotto scanner fotografico HP C9900A
  2. scansione sue vecchie radiografie
  3. nuova Epson V700 scanner
  4. HP Scanjet 4850 scanner
  5. Epson Perfection 3170 scanner

Questa soluzione di espressione regolare ha funzionato in un modo.

Problemi correlati