10

Phương pháp được đề xuất để trích xuất vị trí từ văn bản miễn phí là gì?Phương pháp trích xuất vị trí từ văn bản?

Điều tôi có thể nghĩ là sử dụng quy tắc regex như "từ ... ở vị trí". Nhưng có cách tiếp cận tốt hơn này?

Ngoài ra tôi có thể nghĩ đến việc có bảng tra cứu bảng băm với tên cho các quốc gia và thành phố và sau đó so sánh mọi mã thông báo được trích xuất từ ​​văn bản với bảng băm.

Có ai biết cách tiếp cận tốt hơn không?

Chỉnh sửa: Tôi đang cố gắng trích xuất các vị trí từ văn bản tweet. Vì vậy, vấn đề số lượng tweet cao cũng có thể ảnh hưởng đến lựa chọn của tôi cho một phương thức.

Trả lời

10

Tất cả các phương pháp dựa trên quy tắc sẽ không thành công (nếu văn bản của bạn thực sự là "miễn phí"). Điều đó bao gồm regex, ngữ pháp-miễn phí ngữ pháp, bất kỳ loại tra cứu ... Tin tôi đi, tôi đã ở đó trước :-)

Vấn đề này được gọi là Được gọi là nhận dạng thực thể. Địa điểm là một trong 3 lớp học được nghiên cứu nhiều nhất (với Người và Tổ chức). Stanford NLP có triển khai Java mã nguồn mở cực kỳ mạnh mẽ: http://nlp.stanford.edu/software/CRF-NER.shtml

Bạn có thể dễ dàng tìm thấy các triển khai bằng các ngôn ngữ lập trình khác.

+0

Tôi đang cố gắng trích xuất các vị trí từ văn bản tweet. Xem xét số lượng tweet cao mỗi giây, tôi đoán điều đó sẽ chậm. Đúng? –

+0

No.Đào tạo chậm và tốn nhiều bộ nhớ, nhưng khi chạy thì điều này cực kỳ hiệu quả. – Blacksad

1

Đặt tất cả các vị trí hợp lệ của bạn vào danh sách được sắp xếp. Nếu bạn đang có kế hoạch so sánh phân biệt chữ hoa chữ thường, hãy đảm bảo trường hợp danh sách của bạn đã được chuẩn hóa. Sau đó, tất cả những gì bạn phải làm là lặp qua từng từ "cá nhân" trong văn bản nhập của bạn và ở đầu mỗi từ mới, bắt đầu tìm kiếm nhị phân mới trong danh sách vị trí của bạn. Ngay sau khi bạn tìm thấy một không phù hợp, bạn có thể bỏ qua toàn bộ từ và tiến hành tiếp theo.

Sự cố có thể xảy ra: các vị trí nhiều từ như "New York", "3rd Street", "Cộng hòa Nhân dân Trung Hoa". Có lẽ tất cả phải mất, mặc dù, là để lưu vị trí của đầu tiên từ mới, nếu bạn tìm thấy bsearch của bạn dẫn bạn đến một (có thể!) Kết quả nhiều từ. Sau đó, nếu so sánh đầy đủ không thành công - có thể một vài từ sau đó - tất cả những gì bạn phải làm là hoàn nguyên từ 'tiếp theo' này, liên quan đến từ trước đó bạn bắt đầu.

Khi bạn đang chuẩn bị danh sách vị trí của mình, hãy tạo danh sách tất cả các ký tự có thể xuất hiện bên trong vị trí. Chỉ những cụm từ có chứa các ký tự trong danh sách này mới có thể được coi là 'từ' hợp lệ.

+0

Một vấn đề khác có thể là phần đầu tiên của vị trí nhiều từ có thể là một vị trí. Ví dụ: "Berlin" và "Berlin Heights, OH". – usr2564301

0

Các tweets sắp đến trong bao lâu? Như trong nó là vòi cháy twitter đầy đủ hoặc một số truy vấn lọc? Cách tiếp cận phức tạp hơn một chút, tương tự như cách bạn mô tả là sử dụng công cụ NLP được tích hợp với gazetteer. Rất ít công cụ NLP sẽ theo kịp với tỷ lệ twitter, và rất ít công cụ làm rất tốt với twitter vì tất cả các leet nói. NLP có thể được điều chỉnh cho độ chính xác hoặc thu hồi tùy thuộc vào nhu cầu của bạn, để hạn chế việc thực hiện các khóa trong gazetteer. Tôi khuyên bạn nên xem Rosoka (cũng là Rosoka Cloud qua Amazon AWS) và GeoGravy