10

Jakie są zalecane metody wyodrębniania lokalizacji z dowolnego tekstu?Metody wyodrębniania lokalizacji z tekstu?

Co mogę myśleć, to używać reguł regex takich jak "słowa ... w lokalizacji". Ale czy istnieją lepsze podejścia niż to?

Również mogę pomyśleć o hash tabeli look look z nazwami krajów i miast, a następnie porównać każdy wyodrębniony token z tekstu do tego tabeli hash.

Czy ktoś wie o lepszym podejściu?

Edytuj: Próbuję wyodrębnić lokalizacje z tekstu tweetów. Tak więc kwestia dużej liczby tweetów może również wpłynąć na mój wybór metody.

Odpowiedz

10

Wszystkie podejścia oparte na regułach zawiedzie (jeśli twój tekst jest naprawdę "wolny"). Że zawiera regex, gramatyk bezkontekstowych, każdy rodzaj odnośnika ... Uwierz mi, byłem tam wcześniej :-)

Ten problem nazywa rozpoznawanie jednostek nazwanych. Lokalizacja jest jedną z 3 najczęściej studiowanych klas (z osobą i organizacją). Stanford NLP ma implementację open source w Javie, która jest niezwykle wydajna: http://nlp.stanford.edu/software/CRF-NER.shtml

Możesz łatwo znaleźć implementacje w innych językach programowania.

+0

Próbuję wyodrębnić lokalizacje z tekstu tweetów. Biorąc pod uwagę dużą liczbę tweetów na sekundę, myślę, że zwolniłoby to. Dobrze? –

+0

Nie.Trening jest powolny i zajmuje dużo pamięci, ale w czasie wykonywania jest niezwykle wydajny. – Blacksad

1

Umieść wszystkie swoje prawidłowe lokalizacje w posortowanej liście. Jeśli planujesz porównywać wielkość znaków niewrażliwych na wielkość liter, upewnij się, że przypadek twojej listy jest już znormalizowany.

Następnie wystarczy pętli pojedynczych "słów" w tekście wejściowym i na początku każdego nowego słowa, rozpocząć nowe wyszukiwanie binarne na liście lokalizacji. Jak tylko znajdziesz nie pasujące, możesz pominąć całe słowo i przejść do następnego.

Możliwy problem: lokalizacje zawierające wiele słów, takie jak "Nowy Jork", "3rd Street", "Chińska Republika Ludowa". Być może wystarczy, że zapiszesz pozycję najpierw nowe słowo, jeśli okaże się, że twój bsearch prowadzi do (możliwego!) Wyniku wielu słów. Następnie, jeśli pełne porównanie nie powiedzie się - być może kilka słów później - wszystko, co musisz zrobić, to powrócić do tego "następnego" słowa, w stosunku do poprzedniego, w którym zacząłeś.

Co to jest "słowo": podczas przygotowywania listy lokalizacji utwórz listę wszystkich znaków, które mogą pojawiać się w lokalizacjach. Tylko wyrażenia zawierające znaki z tej listy mogą być uważane za prawidłowe "słowo".

+0

Innym możliwym problemem może być to, że pierwsza część sąsiednich multi-word może być lokalizacja w sobie. "Berlin" kontra "Berlin Heights, OH", na przykład. – usr2564301

0

Jak szybko nadchodzą tweety? Jak w tym przypadku jest to wąż pożarniczy z pełnym świergotem lub niektóre zapytania filtrujące? Nieco bardziej wyrafinowane podejście, podobne do opisywanego, używa narzędzia NLP zintegrowanego z gazeterem. Niewiele jest narzędzi NLP, które utrzymują stawki za Twittera, a bardzo niewiele z nich działa bardzo dobrze ze względu na cały głos. NLP można dostroić do precyzji lub przypomnieć, w zależności od potrzeb, w celu ograniczenia blokowania w dół w gazetteer. Polecam patrząc na Rosoka (także Rosoka Cloud przez Amazon AWS) i GeoGravy

Powiązane problemy