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".
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? –
Nie.Trening jest powolny i zajmuje dużo pamięci, ale w czasie wykonywania jest niezwykle wydajny. – Blacksad