2016-06-17 17 views
5

Chcę wydobyć wszystkie wzmianki o kraju i narodowości z tekstu za pomocą nltk, użyłem tagowania POS, aby wyodrębnić wszystkie tokeny oznaczone etykietą GPE, ale wyniki nie były satysfakcjonujące.Wyodrębnianie narodowości i krajów z tekstu

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

Uzyskane wyniki są następujące:

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

Niektóre są narodowości ale inni są tylko rzeczowniki.

Co więc robię źle lub czy istnieje inny sposób wyodrębnienia takich informacji?

+0

Nie ma w tobie nic złego. Wykonałeś ekstrakcję encji, a następnie wykonałeś fragmenty encji i wyszukano w nich etykietę GPE. Powodem, dla którego nie jesteś zadowolony z wyników NLTK, jest to, że NLTK ma ogólnie słabą wydajność w odniesieniu do jednostek klasyfikacji **. Dostępne są tabele wyszukiwania dla GPE. Są one dość obszerne i bardzo wydajne. Używaj ich zamiast polegać na NLTK. –

+0

Dziękuję, możesz podać mi przykład tych tabel wyszukiwania ... – user6453258

Odpowiedz

2

Jeśli chcesz wyprowadzić nazwy krajów, potrzebujesz tagera NER, a nie tagger POS.

Rozpoznawanie nazwanych obiektów (NER) to podzadanie ekstrakcji informacji, które ma na celu zlokalizowanie i sklasyfikowanie elementów w tekście w predefiniowanych kategoriach, takich jak nazwiska osób, organizacji, lokalizacji, wyrażenia razy, ilości, wartości pieniężne , wartości procentowe itp.

Sprawdź tagger NFC Stanforda!

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

On już przeprowadził ekstrakcję jednostki !! Może nieświadomie. –

+0

Twoja odpowiedź daje mu listę niejawnych słów. Nie masz nawet listy GPE. Zmodyfikuj swoją odpowiedź –

1

Oto geograpy, który używa NLTK do wykonywania ekstrakcji jednostki. Przechowuje wszystkie miejsca i lokalizacje jako gazetery. Następnie wykonuje wyszukiwanie w gazeterze, aby pobrać odpowiednie miejsca i lokalizacje. Spójrz w górę docs więcej szczegółów użytkowania -

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

Naprawdę próbowałem zainstalować geograpy, ale nie udało mi się. Dlatego właśnie polegałem na nltk. – user6453258

+2

Ten sam problem ze mną nie mógł zainstalować geograpy :( –

+0

Proszę zainstalować NLTK przed instalacją geograficzną, Lub możesz zrobić "pip install geograpy-nltk" –

3

Więc po owocnej komentarze, I wykopali w głąb różnych narzędzi Ner, aby znaleźć najlepszy w rozpoznawaniu narodowości i kraju wspomina i jest przestronne ma podmiot NORP który wydobywa narodowości wydajnie. https://spacy.io/docs/usage/entity-recognition

+0

sPacy jest fantastyczna i naprawdę potężna.Ile też polecam wygrać z Alchemy API. Jednak w przypadku dużych danych lepiej jest używać sPacy, ponieważ nie ma to wpływu na koszty transakcji dla każdego zapytania i rezultatu –

+0

Jak wiemy, firma Spacy będzie oznaczać lokalizacje jako {GPE}. W moim przypadku mam dwie lokalizacje oznaczone jako GPE (np. Indie, Delhi) Teraz moim celem jest określenie, który z nich jest miastem i krajem. Proszę o komentarz @Renaud –