Mam dużo tekstów (miliony), od 100 do 4000 słów. Teksty są sformatowane jako praca pisemna, z interpunkcją i gramatyką. Wszystko jest po angielsku.Efektywnie wyodrębnij encje WikiData z tekstu
Problem jest prosty: Jak wyodrębnić każdą encję WikiData z podanego tekstu?
Jednostka jest zdefiniowana jako każdy rzeczownik, właściwy lub zwykły. Tj nazwisk ludzi, organizacji, miejsc i rzeczy, jak krześle, ziemniaki itp
Do tej pory próbowałem następujące:
- tokenize tekst z OpenNLP i wykorzystanie pre-trained models wyodrębnić ludzi, lokalizacji, organizacja i regularne rzeczowniki .
- Zastosuj Porter Stemming, jeśli dotyczy.
- Dopasuj wszystkie wyodrębnione rzeczowniki za pomocą wmflabs-API, aby pobrać potencjalny identyfikator WikiData.
Ten działa, ale czuję, że mogę zrobić to lepiej. Jedną z oczywistych poprawek byłoby buforowanie odpowiednich fragmentów WikiData lokalnie, co planuję zrobić. Zanim jednak to zrobię, chcę sprawdzić, czy istnieją inne rozwiązania.
Sugestie?
Zaznaczyłem pytanie Scala, ponieważ używam zadania Spark.
Zahamowanie jest faktycznie dokonana jedynie na rzeczowników zidentyfikowanych jako nie-właściwe i mnogiej, która nie jest większość. Dzięki za gazety/wskazując na uwagę dbpedii. Nie wiedziałem o tym. – habitats
DBpedia jest faktycznie połączony z Wikidata (z jakiegoś powodu przegapiłem to), więc zaznaczę twoją odpowiedź jako zaakceptowaną, ponieważ mogłem użyć reflektora DBpedia, aby pobrać identyfikator DBMLID i użyć Sparql + RDF do pobrania identyfikatora Wikidata bezpośrednio. – habitats