2013-06-30 7 views
7

Pracuję nad projektem, którego nie jestem do końca pewien. Problem można podsumować w następujący sposób:Określanie położenia geograficznego według arbitralnej treści tekstu

  • Biorąc pod uwagę dowolną treść tekstu (rodzaj raportu), określ, w jakim położeniu geograficznym się znajduje każda część raportu.

Lokalizacje geograficzne obejmują zakres od stanów do powiatów (wszystko w USA), więc ich liczba jest ograniczona, ale każdy raport zawiera na ogół odniesienia do wielu lokalizacji. Na przykład pierwsze 5 akapitów raportu może dotyczyć stanu jako całości, a następnie następne 5 będzie dotyczyć poszczególnych powiatów w tym stanie lub czegoś podobnego.

Ciekaw jestem, jaki byłby najlepszy sposób podejścia do takiego problemu, być może z konkretnym zaleceniem dotyczącym ram NLP lub ML (Python lub Java)?

+1

Czy możesz podać przykład danych wejściowych i oczekiwanych wyników? – Blacksad

Odpowiedz

6

Mogę być w stanie trochę tu pomóc (moje badania dotyczą obszaru Toponym Resolution).

Jeśli dobrze cię rozumiem, szukasz sposobu, aby (1) znaleźć nazwy miejsc w tekście, (2) ujednoznacznić odniesienie geograficzne nazwy miejsca i (3) wyciśnięte przestrzennie całe zdania lub akapity.

Istnieje wiele pakietów open source, które mogą zrobić # 1. Stanford Core NLP, OpenNLP

Istnieje kilka pakietów, które mogą wykonać # 1 i # 2. CLAVIN jest prawdopodobnie jedyną gotową do użycia aplikacją open source, która może to teraz zrobić. Yahoo Placemaker kosztuje, ale może to zrobić.

Nie ma naprawdę pakietu, który może zrobić # 3. Istnieje nowszy projekt o nazwie TEXTGROUNDER, który robi coś, co nazywa się "Geolokalizacją dokumentu", ale gdy kod jest dostępny, nie jest uruchamiany na własnych tekstach wejściowych. Zalecam tylko, abyś na to spojrzał, jeśli chcesz zacząć projekt i spróbować coś takiego zrobić.

Wszystkie trzy zadania nadal stanowią część trwających badań i mogą być niezwykle skomplikowane w zależności od szczegółów tekstu źródłowego. Nie podałeś wielu szczegółów na temat swoich tekstów, ale mam nadzieję, że te informacje mogą ci pomóc.

+0

Dziękuję bardzo za radę! –

+0

Czy mogłabyś skontaktować się ze mną w alex na mev.com, aby dyskutować dalej? –

+0

Wysłałem wiadomość e-mail na adres – GrantD71

2

Stare pytanie, ale może być przydatne dla innych, aby wiedzieć, że Apache OpenNLP ma dodatek o nazwie GeoEntityLinker i pobiera tekst dokumentu i zdania, wyodrębnia elementy (toponimy), wykonuje wyszukiwanie w gazetach USGS i GeoNames (indeksy Lucene), rozwiązuje (lub próbuje co najmniej) topopnymns na kilka sposobów, i zwraca ci zapisywane pozycje gazianów w odniesieniu do każdego zdania w przekazanym dokumencie. Zostanie ono wydane z OpenNLP 1.6, jeśli wszystko pójdzie dobrze ... za mało dokumentacji jeśli jakiekolwiek w tym momencie. To jest bilet w OpenNLP Jira: https://issues.apache.org/jira/i#browse/OPENNLP-579.

to jest kod źródłowy:

http://svn.apache.org/viewvc/opennlp/addons/geoentitylinker-addon/

FYI: Jestem głównym committer pracy na nim.

+0

. Możesz dowiedzieć się więcej na ten temat? Pracuję nad projektem, który może w znacznym stopniu skorzystać z tego narzędzia. – Rich

2

Identyfikacja wzmianek o lokalizacjach geograficznych jest raczej banalna przy użyciu OpenNLP lub GATE itp. Główny problem pojawia się później, kiedy musisz rozróżnić miejsca o tej samej nazwie.Na przykład w Stanach Zjednoczonych jest 29 miejsc o nazwie "Bristol". Który z nich jest poprawny?

Istnieje kilka metod, których można użyć do ujednoznacznienia. Prostym jest zebranie listy wszystkich lokalizacji wymienionych w tekście, uzyskanie ich potencjalnej długości/szerokości geograficznych, a następnie znalezienie zestawu, który ma minimalną sumę odległości.

Lepszym rozwiązaniem, które widziałem podczas wdrażania przez ludzi, jest pobranie z Wikipedii wszystkich artykułów odnoszących się do miejsc, umieszczenie ich w bazie danych dla tekstu takiego jak Lucene, a następnie użycie tekstu jako zapytania w celu znalezienia najbardziej obiecującej lokalizacji pomiędzy kandydatami. mierzenie pewnego wyniku podobieństwa. Pomysł polega na tym, że w artykule oprócz słowa "Bristol" wspomniana jest również nazwa rzeki, osoba lub coś podobnego.

+0

Również czytanie mapy i mapa Reading są zupełnie inne niż ludzi (w Wielkiej Brytanii). –

0

Do wykonania tego zadania potrzebny jest zestaw szkoleniowy z etykietką. Następnie szkolisz model klasyfikacyjny na tym zestawie treningowym i prognozujesz położenie nowych fragmentów tekstu na podstawie modelu. Można zobaczyć, jak wszystkie z nich pracują razem w tym przykładowy kod napisany na górze scikit-learn: http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html

oznaczone zestaw treningowy:

Możesz trenować klasyfikatora na zbiorze treningowym, gdzie każda próbka w szkoleniu jest (akapit, region_id). id_regionu może być identyfikatorem kraju, regionu lub miasta.

Szkolenie model klasyfikacyjny:

zbudować torbę słów modelu (np unigrams) każdej próbki i trenować klasyfikator (np regresja logistyczna z L1 uregulowania) w ciągu oznaczonego zbioru treningowego. Możesz użyć dowolnego narzędzia, ale polecam używanie SCIKIT-LEARN w Pythonie, który jest bardzo prosty i efektywny w użyciu.

Przewidywania:

Po treningu, biorąc pod uwagę akapit lub fragment tekstu, przeszkolony model jest w stanie znaleźć region_id dla niego, który jest oparty na słowach używanych w próbce.

Pamiętaj, aby ustawić parametr regularyzacji na zestawie programistycznym, aby uzyskać dobry wynik (aby zapobiec nadmiernemu dopasowaniu próbki treningowej).

Czytaj my paper i this one na geolokalizacji za pomocą tekstu: http://www.aclweb.org/anthology/N15-1153

i odpowiedni plakatu: http://www.slideshare.net/AfshinRahimi2/geolocation-twittertextnetwork-48968497

także Pisałem a tool nazwie Pigeo że robi dokładnie to, że i pochodzi z pretrained modelu. Oprócz tych prac można znaleźć wiele innych prac badawczych na temat geolokalizacji tekstowej.

Powiązane problemy