2013-04-07 4 views
7

Come il titolo indica che sto cercando di cercare i pronomi in una stringa e sostituirlo con il suo antecedente come:sostituendo pronome con il suo antecedente utilizzando python2.7 e NLTK

[in]: "the princess looked from the palace, she was happy". 
[out]: "the princess looked from the palace, the princess was happy". 

I tag utilizza il pos per tornare pronomi e nomi. Ho bisogno di sapere come sostituire senza conoscere la frase, cioè come specificare il soggetto nella frase per sostituire il pronome con esso. Eventuali suggerimenti?

+3

Si dovrebbe esaminare il sistema [coreference resolution] (http://en.wikipedia.org/wiki/Coreference) di [Stanford CoreNLP] (http://nlp.stanford.edu/software/corenlp.shtml). Ecco un [wrapper Python per esso] (https://github.com/dasmith/stanford-corenlp-python). – Jared

risposta

2

Non conosco il pacchetto nltk (mai usato), ma sembra dare la tua risposta immediatamente. Se si guarda l'esempio dell'albero di analisi su nltk.org, mostra che l'oggetto è etichettato con successo con un tag 'NP-SBJ'. Non è questo quello che stai cercando?

(In precedenza, ho trascurato la parte "nltk" nel titolo e ho scritto la parte seguente.Penso che possa essere interessante come introduzione generale su come risolvere problemi come questo (specialmente se non si dispone un pacchetto disponibile), quindi lo lascerò qui :)

Questa è più una domanda di 'lingua naturale' (cioè lingua inglese) di una domanda Python. Potresti essere più specifico in che tipo di frasi ti aspetti? Dovrebbe funzionare per tutte le possibili frasi in inglese? Penso che sarebbe davvero difficile.

Se le frasi sono abbastanza "facili", può essere sufficiente assumere che ogni cosa prima del primo verbo sia il soggetto. Questo funziona per il vostro esempio, ma non funziona per le seguenti frasi:

yesterday the princess looked from the palace, she was happy. 
the princes who drank tea looked from the palace, she was happy. 

(Si noti che in quest'ultimo periodo il soggetto è "la principessa che hanno bevuto il tè", la parte 'che hanno bevuto il tè' è un 'frase aggettivale').

Inoltre, specificare cosa dovrebbe succedere se il pronome non punta al soggetto (ma per l'oggetto, per esempio):

the princess looked at the prince, he was happy. 

Al fine di risolvere il problema nel caso più generale, si dovrebbe trovare (o fare) una specifica formale della lingua inglese (o qualsiasi altra), che potrebbe dirti esattamente quale parte della frase è il soggetto, verbo, oggetto ecc. Esempio: molte semplici frasi inglesi sono della forma (parti tra parentesi [] sono facoltativi, le parti tra parentesi() sono a scelta, ovvero (il | a) significa che devi scegliere tra "il" o "a"):

sentence := subject verb [object] 

Ogni parte sul lato destro della specifica deve essere definite in dettaglio, ad esempio:

subject, object := (noun_part_of_sentence|noun_part_of_sentence_plural) 
noun_part_of_sentence := article [adjectivelist] [noun_modifier] noun # I guess there is a formal name for this... 
noun_part_of_sentence_plural := [adjectivelist] [noun_modifier] noun_plural # note: no article 
adjectivelist:= adjective [adjectivelist] # i.e., one or more adjectives 

Per frasi più complesse, come quello sopra con la frase aggettivo, la specifica di cui sopra non fa sufficiente, e dovrebbe essere qualcosa di simile:

noun_part_of_sentence := (the|a) [adjectivelist] [noun_modifier] [noun] [adjective_phrase] 
adjective_phrase := relative_pronoun verb [object] 
relative_pronoun := (who|which|that) 

Nota che la specifica di cui sopra è già abbastanza potente: (se si è in grado di identificare correttamente il tipo di ogni parola, ad esempio, verbo, sostantivo, articolo, ecc) è in grado di rilevare con successo le seguenti frasi:

The princess drank the tea. 
The beautiful princess drank the tea. 
The beautiful princess drank delicious the tea. 
A beautiful princess drank delicious the lemon tea. 
The beautiful princess who saw the handsome prince drank the refreshing tea. 
The beautiful princess who saw the handsome prince who made the tea drank the refreshing tea. 

Tuttavia, non permette (ancora) per frasi come 'la principessa guardò il palazzo', 'la principessa bevuto tè' (nota: non "il tè") e infiniti altri. Il trucco è estendere le tue specifiche formali al livello che è adeguato per il tipo di frasi che ti aspetti.

Dopo aver analizzato la frase con successo, tu (così) sai qual è il soggetto, qualsiasi pronomo e puoi fare la sostituzione. Si noti tuttavia che la lingua inglese non è univoca, ad esempio:

The princess looked at her mother, she was happy. 

Sta indicando alla principessa o alla madre?

Buona fortuna!

P.S. L'inglese non è la mia lingua madre, quindi spero di aver usato i termini giusti per tutto!