2016-06-17 5 views
5

ich alle Land extrahieren möchten und Nationalität erwähnt von Text nltk verwenden, habe ich POS alle GPE zu extrahieren Tagging markierte Token, aber die Ergebnisse waren nicht befriedigend.Extrahierung Nationalitäten und Länder von Text

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") 

Die erzielten Ergebnisse sind:

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

Einige sind Nationalitäten, aber andere sind nur Substantive.

Also, was mache ich falsch oder gibt es eine andere Möglichkeit, solche Informationen zu extrahieren?

+0

Es ist nichts falsch mit dir getan hat. Sie haben Entity Extraction durchgeführt und dann die Entity Chunks genommen und in ihnen nach GPE Label gesucht. Der Grund, warum Sie nicht mit NLTK-Ergebnissen zufrieden sind, liegt darin, dass NLTK generell eine schlechte Leistung bezüglich der Klassifizierung von Entitäten ** aufweist. Es gibt Nachschlagetabellen für GPEs. Sie sind ziemlich umfassend und sehr effizient. Verwenden Sie sie, anstatt sich auf NLTK zu verlassen. –

+0

Vielen Dank, können Sie mir ein Beispiel für diese Nachschlagetabellen geben ... – user6453258

Antwort

2

Wenn Sie die Ländernamen extrahiert werden soll, was Sie brauchen, ist NER Tagger, Tagger nicht POS.

Die NME (Entity-Entity Recognition) ist eine Teilaufgabe der Informationsextraktion, mit der Elemente im Text in vordefinierte Kategorien wie Namen von Personen, Organisationen, Orte, Zeitausdrücke, Mengen und Geldwerte gesucht und klassifiziert werden , Prozentsätze usw.

Schauen Sie sich Stanford NER Tagger an!

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

Er ist bereits Entity-Extraktion durchgeführt !! Unbewusst vielleicht. –

+0

Ihre Antwort gibt ihm nur eine Liste von klassifizierten Wörtern. Sie geben ihm nicht einmal eine Liste von GPEs. Bitte bearbeiten Sie Ihre Antwort –

1

Hier geograpy die NLTK verwendet Entity-Extraktion durchzuführen. Es speichert alle Orte und Orte als Gazetteer. Es führt dann eine Suche auf dem Ortsverzeichnis durch, um relevante Orte und Orte abzurufen. Schauen Sie die Dokumentation für mehr Nutzungsdetails up -

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

Ich habe tatsächlich versucht, Geografie zu installieren, aber gescheitert .. das ist der Grund, warum ich auf die Nltk verließ. – user6453258

+2

gleiches Problem mit mir nicht geograpy installieren kann :( –

+0

Bitte NLTK installieren, bevor Sie Geographie installieren, oder Sie können 'tun pip geograpy-nltk' –

3

So nach den fruchtbaren Kommentaren, ich grub tiefer in verschiedene NER Werkzeuge, um die besten zu erkennen Nationalitäten zu finden und das Land erwähnt und fand, dass SPACY eine NORP Einheit hat, die Nationalitäten extrahiert effizient. https://spacy.io/docs/usage/entity-recognition

+0

spacy ist fantastisch und wirklich mächtig installieren. ich empfehle auch, als auch um mit Alchemy API täuscht. Bei großen Daten ist es besser, sPacy zu verwenden, da es keine Transaktionskosten für jede Abfrage und jedes Ergebnis aufbringt. –

+0

Wie wir wissen, wird spacy Orte als {GPE} kennzeichnen. In meinem Fall habe ich zwei Standorte als GPE markiert (zB Indien, Delhi). Jetzt ist mein Ziel zu identifizieren, welches Stadt und das Land ist. Bitte @Renaud kommentieren –