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?
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. –
Dziękuję, możesz podać mi przykład tych tabel wyszukiwania ... – user6453258