Chunking e estrazione di informazioni

Cos'è il Chunking?

Il chunking, uno dei processi importanti nell'elaborazione del linguaggio naturale, viene utilizzato per identificare parti del discorso (POS) e brevi frasi. In altre parole semplici, con il chunking, possiamo ottenere la struttura della frase. È anche chiamatopartial parsing.

Schemi a blocchi e fessure

Chunk patternssono i modelli di tag di parte del discorso (POS) che definiscono il tipo di parole che compongono un blocco. Possiamo definire modelli di blocchi con l'aiuto di espressioni regolari modificate.

Inoltre, possiamo anche definire modelli per quale tipo di parole non dovrebbero essere in un blocco e queste parole non suddivise sono note come chinks.

Esempio di implementazione

Nell'esempio seguente, insieme al risultato dell'analisi della frase “the book has many chapters”, esiste una grammatica per le frasi nominali che combina sia un chunk che uno schema chink -

import nltk
sentence = [
   ("the", "DT"),
   ("book", "NN"),
   ("has","VBZ"),
   ("many","JJ"),
   ("chapters","NNS")
]
chunker = nltk.RegexpParser(
   r'''
   NP:{<DT><NN.*><.*>*<NN.*>}
   }<VB.*>{
   '''
)
chunker.parse(sentence)
Output = chunker.parse(sentence)
Output.draw()

Produzione

Come visto sopra, il modello per specificare un blocco consiste nell'usare le parentesi graffe come segue:

{<DT><NN>}

E per specificare una fessura, possiamo capovolgere le parentesi graffe come segue:

}<VB>{.

Ora, per un particolare tipo di frase, queste regole possono essere combinate in una grammatica.

Estrazione delle informazioni

Sono stati esaminati tagger e parser che possono essere utilizzati per creare un motore di estrazione delle informazioni. Vediamo una pipeline di estrazione delle informazioni di base -

L'estrazione delle informazioni ha molte applicazioni tra cui:

  • Business intelligence
  • Riprendi la raccolta
  • Analisi dei media
  • Rilevamento del sentiment
  • Ricerca brevetti
  • Scansione e-mail

Riconoscimento di entità denominate (NER)

Il riconoscimento di entità denominate (NER) è in realtà un modo per estrarre alcune delle entità più comuni come nomi, organizzazioni, posizione, ecc. Vediamo un esempio che ha eseguito tutti i passaggi di pre-elaborazione come tokenizzazione di frasi, tag POS, suddivisione in blocchi, NER, e segue la pipeline fornita nella figura sopra.

Esempio

Import nltk
file = open (
   # provide here the absolute path for the file of text for which we want NER
)
data_text = file.read()
sentences = nltk.sent_tokenize(data_text)
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
for sent in tagged_sentences:
print nltk.ne_chunk(sent)

Alcuni dei Named-entity recognition (NER) modificati possono essere utilizzati anche per estrarre entità come nomi di prodotti, entità biomediche, marchi e molto altro.

Estrazione delle relazioni

L'estrazione delle relazioni, un'altra operazione di estrazione delle informazioni comunemente utilizzata, è il processo di estrazione delle diverse relazioni tra le varie entità. Possono esserci relazioni diverse come eredità, sinonimi, analoghi, ecc., La cui definizione dipende dal bisogno di informazioni. Ad esempio, supponiamo di voler cercare la scrittura di un libro, la paternità sarebbe una relazione tra il nome dell'autore e il nome del libro.

Esempio

Nell'esempio seguente, utilizziamo la stessa pipeline di IE, come mostrato nel diagramma sopra, che abbiamo utilizzato fino alla relazione con entità denominata (NER) e la estendiamo con un modello di relazione basato sui tag NER.

import nltk
import re
IN = re.compile(r'.*\bin\b(?!\b.+ing)')
for doc in nltk.corpus.ieer.parsed_docs('NYT_19980315'):
for rel in nltk.sem.extract_rels('ORG', 'LOC', doc, corpus = 'ieer',
pattern = IN):
print(nltk.sem.rtuple(rel))

Produzione

[ORG: 'WHYY'] 'in' [LOC: 'Philadelphia']
[ORG: 'McGlashan & Sarrail'] 'firm in' [LOC: 'San Mateo']
[ORG: 'Freedom Forum'] 'in' [LOC: 'Arlington']
[ORG: 'Brookings Institution'] ', the research group in' [LOC: 'Washington']
[ORG: 'Idealab'] ', a self-described business incubator based in' [LOC: 'Los Angeles']
[ORG: 'Open Text'] ', based in' [LOC: 'Waterloo']
[ORG: 'WGBH'] 'in' [LOC: 'Boston']
[ORG: 'Bastille Opera'] 'in' [LOC: 'Paris']
[ORG: 'Omnicom'] 'in' [LOC: 'New York']
[ORG: 'DDB Needham'] 'in' [LOC: 'New York']
[ORG: 'Kaplan Thaler Group'] 'in' [LOC: 'New York']
[ORG: 'BBDO South'] 'in' [LOC: 'Atlanta']
[ORG: 'Georgia-Pacific'] 'in' [LOC: 'Atlanta']

Nel codice sopra, abbiamo usato un corpus integrato chiamato ieer. In questo corpus, le frasi sono etichettate fino a Named-entity relation (NER). Qui dobbiamo solo specificare il modello di relazione che vogliamo e il tipo di NER che vogliamo che la relazione definisca. Nel nostro esempio, abbiamo definito la relazione tra un'organizzazione e una posizione. Abbiamo estratto tutte le combinazioni di questi modelli.