2016-06-17 11 views
5

Voglio estrarre tutte le citazioni di nazionalità e nazionalità dal testo utilizzando nltk, ho usato il tagging POS per estrarre tutti i token etichettati GPE ma i risultati non erano soddisfacenti.Estrarre nazionalità e paesi dal testo

abstract="Thyroid-associated orbitopathy (TO) is an autoimmune-mediated orbital inflammation that can lead to disfigurement and blindness. Multiple genetic loci have been associated with Graves' disease, but the genetic basis for TO is largely unknown. This study aimed to identify loci associated with TO in individuals with Graves' disease, using a genome-wide association scan (GWAS) for the first time to our knowledge in TO.Genome-wide association scan was performed on pooled DNA from an Australian Caucasian discovery cohort of 265 participants with Graves' disease and TO (cases) and 147 patients with Graves' disease without TO (controls). " 

    sent = nltk.tokenize.wordpunct_tokenize(abstract) 
    pos_tag = nltk.pos_tag(sent) 
    nes = nltk.ne_chunk(pos_tag) 
    places = [] 
    for ne in nes: 
     if type(ne) is nltk.tree.Tree: 
     if (ne.label() == 'GPE'): 
      places.append(u' '.join([i[0] for i in ne.leaves()])) 
     if len(places) == 0: 
      places.append("N/A") 

I risultati ottenuti sono:

['Thyroid', 'Australian', 'Caucasian', 'Graves'] 

Alcuni sono le nazionalità, ma altri sono solo nomi.

Quindi cosa sto facendo male o c'è un altro modo per estrarre tali informazioni?

+0

Non c'è niente di sbagliato in te. Hai eseguito l'estrazione dell'entità e poi hai preso i pezzi dell'entità e cercato l'etichetta GPE al loro interno. Il motivo per cui non sei soddisfatto dei risultati NLTK è perché NLTK ha generalmente ** prestazioni scadenti rispetto alle entità classificanti **. Sono disponibili tabelle di ricerca per GPE. Sono abbastanza complete e molto efficienti. Usali invece di fare affidamento su NLTK. –

+0

Grazie, puoi darmi un esempio di quelle tabelle di ricerca ... – user6453258

risposta

2

Se si desidera estrarre i nomi dei paesi, ciò di cui si ha bisogno è il tagger NER, non il tagger POS.

Il riconoscimento di entità con nome (NER) è una sottoattività dell'estrazione di informazioni che cerca di individuare e classificare elementi nel testo in categorie predefinite quali nomi di persone, organizzazioni, ubicazioni, espressioni di tempi, quantità, valori monetari , percentuali, ecc.

Dai un'occhiata al tagger Stanford NER!

from nltk.tag.stanford import NERTagger 
import os 
st = NERTagger('../ner-model.ser.gz','../stanford-ner.jar') 
tagging = st.tag(text.split()) 
+1

Ha già eseguito l'estrazione dell'entità !! Forse inconsapevolmente. –

+0

La tua risposta gli fornisce solo un elenco di parole classificate. Non gli fornisci nemmeno un elenco di GPE. Si prega di modificare la risposta –

1

Ecco geograpy che utilizza NLTK per eseguire estrazione di entità. Memorizza tutti i luoghi e le posizioni come un dizionario geografico. Quindi esegue una ricerca sul dizionario geografico per recuperare luoghi e luoghi pertinenti. Cercare la documentazione per ulteriori dettagli di utilizzo -

from geograpy import extraction 

e = extraction.Extractor(text="Thyroid-associated orbitopathy (TO) is an autoimmune- 
mediated orbital inflammation that can lead to disfigurement and blindness. 
Multiple genetic loci have been associated with Graves' disease, but the genetic 
basis for TO is largely unknown. This study aimed to identify loci associated with 
TO in individuals with Graves' disease, using a genome-wide association scan 
(GWAS) for the first time to our knowledge in TO.Genome-wide association scan was 
performed on pooled DNA from an Australian Caucasian discovery cohort of 265 
participants with Graves' disease and TO (cases) and 147 patients with Graves' 
disease without TO (controls).") 

e.find_entities() 
print e.places() 
+1

Ho effettivamente provato ad installare geograpy ma non è riuscito .. questo è il motivo per cui mi sono basato sul nltk. – user6453258

+2

Lo stesso problema con me non è riuscito a installare la geografia :( –

+0

Installare NLTK prima di installare l'area geografica, oppure si può fare 'pip install geograpy-nltk' –

3

Così, dopo i commenti fruttuosi, ho fatta una buca più in profondità diversi strumenti NER per trovare la migliore nella nazionalità riconoscimento e del paese menzioni e ha scoperto che SPACY ha un'entità NORP che estrae le nazionalità in modo efficiente. https://spacy.io/docs/usage/entity-recognition

+0

sPacy è fantastico e molto potente. Suggerisco anche di scherzare con le API di Alchemy. Anche se per i dati di grandi dimensioni è preferibile utilizzare sPacy in quanto non impone costi di transazione per ogni query e risultato –

+0

Come sappiamo, spacy etichetta i percorsi come {GPE}. Nel mio caso, ho due posizioni contrassegnate come GPE (ad esempio, India, Delhi) Ora il mio obiettivo è identificare quale sia la città e il paese. Per favore commenta @Renaud –