Trích xuất chuỗi chuẩn từ danh sách các chuỗi nhiễu


10

Tôi có hàng ngàn danh sách các chuỗi và mỗi danh sách có khoảng 10 chuỗi. Hầu hết các chuỗi trong một danh sách nhất định rất giống nhau, mặc dù một số chuỗi (hiếm khi) hoàn toàn không liên quan đến các chuỗi khác và một số chuỗi chứa các từ không liên quan. Chúng có thể được coi là các biến thể ồn ào của một chuỗi chính tắc. Tôi đang tìm kiếm một thuật toán hoặc một thư viện sẽ chuyển đổi từng danh sách thành chuỗi chính tắc này.

Đây là một danh sách như vậy.

  • Chiến tranh giữa các vì sao: Tập IV Một hy vọng mới | StarWars.com
  • Chiến tranh giữa các vì sao tập IV - Một hy vọng mới (1977)
  • Chiến tranh giữa các vì sao: Tập IV - Một hy vọng mới - Cà chua thối
  • Xem Star Wars: Tập IV - Một hy vọng mới trực tuyến miễn phí
  • Chiến tranh giữa các vì sao (1977) - Những bộ phim hay nhất
  • [REC] 4 poster hứa hẹn cái chết của động cơ phía ngoài - SciFiNow

Đối với danh sách này, bất kỳ chuỗi nào khớp với biểu thức chính quy ^Star Wars:? Episode IV (- )?A New Hope$sẽ được chấp nhận.

Tôi đã xem khóa học của Andrew Ng về Machine Learning trên Coursera, nhưng tôi không thể tìm thấy một vấn đề tương tự.


2
Tái bút: Tôi nghĩ thuật ngữ bạn đang tìm kiếm là "kinh điển"
Sean Owen

Là chuỗi "có thể xảy ra nhất" / "đồng thuận nhất" mà bạn đang tìm cách xác định biểu thức chính quy? Hoặc một trong các chuỗi trong danh sách?
MrMeritology

@MrMeritology Tôi không tìm kiếm một biểu thức chính quy. Tôi đã chỉ ra một biểu thức chính quy trong câu hỏi của tôi chỉ để minh họa mức độ linh hoạt của tôi trong loại chuỗi mà tôi sẽ coi là chính xác.
Lacton

ĐỒNG Ý. Sau đó, câu trả lời tôi đưa ra dưới đây sẽ làm việc cho bạn.
MrMeritology

Điều này sẽ đến dưới NER (được công nhận thực thể)?
hà mã

Câu trả lời:


4

Là một giải pháp ngây thơ, trước tiên tôi sẽ đề xuất chọn các chuỗi chứa mã thông báo thường xuyên nhất trong danh sách. Bằng cách này bạn có thể thoát khỏi chuỗi không liên quan.

Trong cụm từ thứ hai tôi sẽ bỏ phiếu đa số. Giả sử 3 câu:

  • Chiến tranh giữa các vì sao: Tập IV Một hy vọng mới | StarWars.com
  • Chiến tranh giữa các vì sao tập IV - Một hy vọng mới (1977)
  • Chiến tranh giữa các vì sao: Tập IV - Một hy vọng mới - Cà chua thối

Tôi sẽ lần lượt đi qua các mã thông báo. Chúng tôi bắt đầu bằng "Ngôi sao". Nó thắng khi tất cả các chuỗi bắt đầu với nó. "Chiến tranh" cũng sẽ chiến thắng. Cái tiếp theo là ":". Nó cũng sẽ thắng.

Tất cả các mã thông báo sẽ tham gia bỏ phiếu đa số cho đến khi "Hy vọng". Mã thông báo tiếp theo sau "Hy vọng" sẽ là "|" hoặc "(" hoặc "-". Không ai trong số họ sẽ giành chiến thắng trong việc bỏ phiếu đa số vì vậy tôi sẽ dừng ở đây!

Một giải pháp khác có lẽ là sử dụng chuỗi con chung dài nhất .

Như tôi đã nói, tôi không nghĩ nhiều về nó. Vì vậy, có thể có nhiều giải pháp tốt hơn cho vấn đề của bạn :-)


3

Đầu tiên tính khoảng cách chỉnh sửa giữa tất cả các cặp chuỗi. Xem http://en.wikipedia.org/wiki/Edit_distancehttp://web.stanford.edu/ class / cs124/lec/med.pdf . Sau đó loại trừ bất kỳ chuỗi ngoại lệ nào dựa trên một số ngưỡng khoảng cách.

Với các chuỗi còn lại, bạn có thể sử dụng ma trận khoảng cách để xác định chuỗi trung tâm nhất. Tùy thuộc vào phương pháp bạn sử dụng, bạn có thể nhận được kết quả mơ hồ cho một số dữ liệu. Không có phương pháp nào là hoàn hảo cho tất cả các khả năng. Đối với mục đích của bạn, tất cả những gì bạn cần là một số quy tắc heuristic để giải quyết sự mơ hồ - tức là chọn hai hoặc nhiều ứng cử viên.

Có thể bạn không muốn chọn "hầu hết trung tâm" từ danh sách các chuỗi của mình, nhưng thay vào đó, bạn muốn tạo một biểu thức chính quy để nắm bắt mẫu chung cho tất cả các chuỗi không phải là ngoại lệ. Một cách để làm điều này là tổng hợp một chuỗi tương đương với tất cả các chuỗi không ngoại lệ. Bạn có thể tìm ra khoảng cách chỉnh sửa cần thiết từ ma trận và sau đó bạn sẽ tạo ngẫu nhiên thường xuyên bằng cách sử dụng các khoảng cách đó làm ràng buộc. Sau đó, bạn sẽ kiểm tra biểu thức chính quy của ứng viên và chấp nhận biểu thức đầu tiên phù hợp với các ràng buộc và cũng chấp nhận tất cả các chuỗi trong danh sách không phải là ngoại lệ của bạn. (Bắt đầu xây dựng các biểu thức chính quy từ danh sách chuỗi con chung dài nhất, vì đó là các ký tự không phải ký tự đại diện.)

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.