Cách chọn tùy chọn có thể xảy ra nhất từ ​​danh sách dựa trên văn bản người dùng Nhập


11

Tôi đang làm việc trên Ứng dụng OCR nơi tôi cần chọn một tùy chọn dựa trên kiểu nhập văn bản của người dùng.

Ex:
Available Options:
["python", "ruby", "java", "clojure", "haskell"]

Input: kava
Output: java

Input: ruby
Output: ruby

Input: clujuro
Output: clojure

etc.. 

Ứng dụng của tôi là python, có một thuật toán đã tồn tại để giải quyết vấn đề này.


1
Bây giờ có thể không đáng để sửa nhưng IMO một tiêu đề phù hợp hơn sẽ là "cách xác định khoảng cách (chênh lệch) giữa các chuỗi"
Jeff Welling

3
@Jeff: và sau đó tôi sẽ không bao giờ tìm thấy câu hỏi này, vì tôi sẽ không biết rằng cái tôi cần có thể được gọi là "chênh lệch khoảng cách" ... Và đó không phải là lý do duy nhất để không đưa giải pháp bạn cần vào câu hỏi Nó có thể ngăn cản mọi người đề xuất các giải pháp thay thế cho vấn đề bạn đang thực sự gặp phải. Trường hợp tại điểm: câu trả lời của loa.
Marjan Venema

1
Quan điểm của tôi là, bây giờ mà bạn làm bí quyết, sử dụng một tiêu đề chính xác hơn có thể giúp thu hút câu trả lời từ những người không biết những gì "làm thế nào để chọn một phần lớn có thể xảy ra ..." có nghĩa là nhưng người có thể nhận ra "khoảng cách giữa dây", nhưng để mỗi mình. Nó đã chỉ là một sự gợi ý thôi mà. Tôi không biết ý của bạn là gì và gần như không nhấp vào câu hỏi của bạn vì đó là tất cả.
Jeff Welling

Câu trả lời:


10

Điều này được thực hiện bằng các thuật toán của danh mục " khớp chuỗi gần đúng ". Một biện pháp phổ biến để so sánh hai chuỗi được gọi là khoảng cách Levenshtein . Có một triển khai trăn có sẵn ở đây .

Về cơ bản, bạn so sánh đầu vào với đầu ra có thể và chọn đầu ra có khoảng cách nhỏ nhất đến đầu ra mong muốn.

Bài viết trên wikipedia cũng đề cập đến nhiều thuật toán khác mà bạn có thể thử trong trường hợp bạn cần một cái gì đó cụ thể hơn.


Tôi đã có một vấn đề tương tự trong ruby ​​và đây chính xác là cách tôi giải quyết nó.
Jeff Welling

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.