2015-05-16 16 views
9

Sto cercando di capire come utilizzare il chunker a cascata di NLTK come da Chapter 7 of the NLTK book. Sfortunatamente, sto riscontrando alcuni problemi durante l'esecuzione di misure non banali di chunking.Estrazione della relazione tramite chunking con NLTK

Cominciamo con questa frase:

"adventure movies between 2000 and 2015 featuring performances by daniel craig"

sono in grado di trovare tutte le NP rilevanti quando uso il seguente grammatica:

grammar = "NP: {<DT>?<JJ>*<NN.*>+}"

Tuttavia, non sono sicuro come costruire strutture nidificate con NLTK. Il libro fornisce il seguente formato, ma ci sono chiaramente alcune cose mancanti (ad esempio, Come si fa in realtà specificare più regole?):

grammar = r""" 
    NP: {<DT|JJ|NN.*>+}   # Chunk sequences of DT, JJ, NN 
    PP: {<IN><NP>}    # Chunk prepositions followed by NP 
    VP: {<VB.*><NP|PP|CLAUSE>+$} # Chunk verbs and their arguments 
    CLAUSE: {<NP><VP>}   # Chunk NP, VP 
    """ 

Nel mio caso, mi piacerebbe fare qualcosa di simile al seguente:

grammar = r""" 
      MEDIA: {<DT>?<JJ>*<NN.*>+} 
      RELATION: {<V.*>}{<DT>?<JJ>*<NN.*>+} 
      ENTITY: {<NN.*>} 
      """ 

Supponendo che mi piacerebbe utilizzare un chunker in cascata per il mio compito, quale sintassi dovrei usare? Inoltre, è possibile per me specificare parole specifiche (ad esempio "diretto" o "recitato") quando si usa un chunker?

risposta

3

Non posso commentare la parte relativa all'estrazione della relazione, non ultimo perché non si forniscono dettagli su cosa si vuole fare e quale tipo di dati si dispone. Quindi questa è una risposta piuttosto parziale.

a.) Come funziona il chunking a cascata in NLTK b) È possibile trattare il chunker come una grammatica context-free e, in caso affermativo, come?

Se ho ben capito sezione "Building nested structure with cascaded chunkers" nel libro NLTK, è possibile utilizzarlo con una grammatica libera dal contesto, ma è necessario applicarlo più volte per ottenere la struttura ricorsiva. I Chunkers sono piatti, ma puoi aggiungere pezzi in cima a pezzi.

c.) Come posso utilizzare Chunking per eseguire l'estrazione delle relazioni?

Non riesco davvero a parlarne, e comunque come ho detto tu non dai particolari; ma se hai a che fare con il testo reale, la mia comprensione è che i set di regole scritti a mano per l'attività sono inutili a meno che tu non abbia una grande squadra e molto tempo. Analizza gli strumenti probabilistici forniti con NLTK. Sarà molto più facile se hai un corpus di formazione annotato.

In ogni caso, un paio di commenti su RegexpParser.

  1. Troverete molti altri esempi di utilizzo su http://www.nltk.org/howto/chunk.html. (Purtroppo non è un vero e how-to, ma una suite di test.)

  2. Secondo this, è possibile specificare più regole di espansione in questo modo:

    patterns = """NP: {<DT|PP\$>?<JJ>*<NN>} 
        {<NNP>+} 
        {<NN>+} 
    """ 
    

    Vorrei aggiungere che le grammatiche possono avere più regole con lo stesso lato sinistro. Ciò dovrebbe aggiungere una certa flessibilità con le regole relative al raggruppamento, ecc.

Problemi correlati