Định hướng tên địa điểm lộn xộn trong python (tốt nhất là trên máy cục bộ)


8

Tôi có danh sách với vài triệu tên địa điểm đến từ hồ sơ Flickr. Người dùng đã cung cấp các dấu vị trí này dưới dạng văn bản miễn phí, vì vậy chúng trông như thế này:

Roma, Italy
Kennesaw, USA
Saginaw, MI
Rucker, Missouri, USA
Melbourne, Australia
Madrid, Spain
live in Sarnia / work in London, Canada
Valladolid, España
Italia
West Hollywood, United States

Tôi muốn định hướng những tên địa danh này. Tôi biết rằng trong một số trường hợp không có giải pháp đơn giản nào, nhưng tôi sẵn sàng sống với một số định kiến ​​sai và với "không có câu trả lời" cho một số nơi. Nếu một tên địa điểm tương ứng với tên của nhiều thành phố, thì tôi muốn gán địa điểm đó cho thành phố lớn nhất mà nó tương ứng.

Api công cụ tìm địa điểm của Yahoo sẽ là một giải pháp tốt cho vấn đề này, nhưng tôi sẽ cần thực hiện quá nhiều lệnh gọi API để vượt qua danh sách của mình, vì vậy tôi muốn một giải pháp cục bộ (nghĩa là một giải pháp không phụ thuộc vào api từ xa) . Có ai biết bất kỳ thư viện python nào làm điều này, hoặc bất kỳ giải pháp địa phương nào khác không?

(Tôi cũng đã hỏi câu hỏi này trên stackoverflow .)

Câu trả lời:


8

Bạn có thể thử geodict của thư viện Python . Điều này có bộ dữ liệu bạn có thể tải xuống và nhập vào cơ sở dữ liệu - bạn có thể kiểm tra danh sách để xem chúng có hoạt động tốt hay không với dữ liệu của bạn. Nó hoạt động theo hai bước:

  1. Trích xuất tên
  2. Khớp tên với một vị trí trong danh sách

Thêm chi tiết (và một tùy chọn trực tuyến khác trong các ý kiến) ở đây .


2

Tôi giả sử dự đoán tốt nhất của bạn là sử dụng một thuật toán mờ.

Lấy từ điển địa phương của bạn về tên địa điểm và đơn vị hành chính và so sánh từng từ và từng khối văn bản được phân tách bằng dấu phẩy so với từ điển này. Chỉ định một số điểm cho mỗi trận đấu. Bạn có thể muốn sử dụng một tìm kiếm được chuẩn hóa để giải thích cho các lỗi chính tả và có "danh sách bỏ qua" cho các từ như "trực tiếp" và "công việc" và "trong". Thêm điểm cho các đơn vị hành chính vào điểm của bất kỳ đơn vị hoặc tên địa điểm nhỏ hơn nào trong các trận đấu của bạn nằm trong đơn vị hành chính này.

Điều chỉnh chức năng cho điểm với kết quả của bạn cho đến khi bạn hài lòng. Lấy trận đấu ghi điểm tốt nhất.

e.g.: Roma, Italy 
Roma matches 8 places (score according to size)
Roma matches 23 more places with normalization (lower score according to size)
Italy matches 4 places + 2 administrative units (COUNTRY, DISTRICT) (score acconding to size)
Italy matches 14 more places and units with normalization (lower score according to size)
One of the Romas lies in one of your units. -> combine scores

Nếu bạn điều chỉnh là tốt, bạn sẽ dành hầu hết các điểm cho thủ đô của Ý.


1

Bạn có thể sử dụng thư viện python geotext cho cùng.

pip install geotext

tất cả chỉ cần cài đặt thư viện này. Cách sử dụng đơn giản như:

from geotext import GeoText
places = GeoText("London is a great city")
places.cities

đưa ra kết quả 'London'

Danh sách các thành phố được bảo hiểm trong thư viện này không rộng rãi nhưng nó có một danh sách tốt.


0

Một sản phẩm thương mại là bộ mã hóa địa lý của Polygon Analytics , tồn tại dưới dạng API SAAS REST cũng như API C ++ hiệu suất cao tại chỗ (với các trình bao bọc cho Python, Java và các loại khác) để tránh độ trễ mạng (hoặc cho dữ liệu nhạy cảm).

API của nó cũng cung cấp đầu ra lat / lon cho ánh xạ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.