Πρόσφατα, υπάρχει ένα πρόβλημα που πρέπει να αντιμετωπιστεί, δηλαδή να συγκριθεί η συμβολοσειρά που εισήγαγε ο χρήστης και η συμβολοσειρά που έλαβε το σύστημα, εάν το σφάλμα δεν είναι πολύ μεγάλο, το σύστημα θα θεωρήσει ότι πληροί τις απαιτήσεις και είναι καλύτερο να ορίσετε ένα όριο. Όταν ασχολείστε με την αναγνώριση CAPTCHA, πρέπει να συγκρίνετε την ομοιότητα των κωδικών χαρακτήρων και να χρησιμοποιήσετε τον "αλγόριθμο επεξεργασίας απόστασης" για να καταγράψετε την αρχή και την εφαρμογή C#.
Σύμφωνα με την εγκυκλοπαίδεια Baidu:
Η απόσταση επεξεργασίας, γνωστή και ως απόσταση Levenshtein (γνωστή και ως απόσταση επεξεργασίας), είναι ο ελάχιστος αριθμός επεξεργασιών που απαιτούνται για την εναλλαγή από τη μία στην άλλη μεταξύ δύο συμβολοσειρών και όσο μεγαλύτερη είναι η απόσταση, τόσο πιο διαφορετικές είναι. Οι λειτουργίες επεξεργασίας με άδεια περιλαμβάνουν την αντικατάσταση ενός χαρακτήρα με έναν άλλο, την εισαγωγή ενός χαρακτήρα και την αφαίρεση ενός χαρακτήρα.
Για παράδειγμα, μετατρέψτε τη λέξη γατάκι σε καθιστή:
Σίτεν (Κ→Σ)
Σιτίνη (Ε→Θ)
καθιστή θέση (→g)
Ο Ρώσος επιστήμονας Vladimir Levenshtein πρότεινε αυτή την ιδέα το 1965. Εξ ου και το όνομα Levenshtein Distance.
Για παράδειγμα
Αν str1="ivan", str2="ivan", τότε υπολογίζεται ότι είναι ίσο με 0. Δεν μετατράπηκε. ομοιότητα=1-0/Math.Max(str1.length,str2.length)=1 Αν str1="ivan1", str2="ivan2", τότε υπολογίζεται ότι είναι ίσο με 1. Το "1" του str1 μετατρέπεται σε "2", μετατρέπει έναν χαρακτήρα, οπότε η απόσταση είναι 1, ομοιότητα = 1-1/Math.Max(str1.length, str2.length) = 0.8
Εφαρμογή:
- Ανάλυση DNA
- Ορθογραφικός έλεγχος
- Αναγνώριση ομιλίας
- Ανίχνευση λογοκλοπής
Ο αλγόριθμος υλοποιείται σε C#:
Κωδικός δοκιμής:
Από τα αποτελέσματα των δοκιμών, συμπεραίνεται ότιχώροςήΣημεία στίξης、Θέση συμβολοσειράςΔιαφορετικές πόλειςΑποτελέσματα που επηρεάζουν την ομοιότηταΕπομένως, κατά τη σύγκριση της αναγνώρισης συμβολοσειράς, συνιστάται να αφαιρέσετε όλα τα κενά και τα ειδικά σύμβολα στη συμβολοσειρά πριν καλέσετε τον αλγόριθμο。
Πόροι:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Στο GitHub, υπάρχει επίσης μια βιβλιοθήκη για συγκρίσεις ομοιότητας συμβολοσειρών C#
Το FuzzyString είναι μια βιβλιοθήκη που αναπτύχθηκε για την καθημερινή μου εργασία για τον συντονισμό των συμβάσεων ονομασίας μεταξύ διαφορετικών μοντέλων πλέγματος. Έχω αφαιρέσει τον κώδικα για το συγκεκριμένο σύστημα ισχύος και έχω συγκεντρώσει αυτό που μπορεί να χρησιμοποιηθεί αποτελεσματικά ως επέκταση συμβολοσειράς για να προσδιορίσω την κατά προσέγγιση ισότητα μεταξύ των δύο συμβολοσειρών. Όλοι οι αλγόριθμοι που χρησιμοποιούνται εδώ έχουν εξαχθεί από διαδικτυακές πηγές, έχουν μετατραπεί σε C# και έχουν μεταγλωττιστεί σε αυτήν τη βιβλιοθήκη. Βρήκα πολλές άλλες παρόμοιες υλοποιήσεις ανοιχτού κώδικα που δεν είναι διαθέσιμες για . ΚΑΘΑΡΑ / C#。 Η προσθήκη *.dll στο έργο σας θα σας δώσει πρόσβαση σε αυτήν την επέκταση και στις μεμονωμένες επεκτάσεις κάτω από την επέκταση ApproximatelyEquals().
Διεύθυνση:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Εγκατάσταση Nuget:
Αλγόριθμοι που περιλαμβάνονται σε αυτό το έργο:
- Απόσταση χαμάμ
- Απόσταση Jaccard
- Απόσταση Jaro
- Απόσταση Jaro-Winkler
- Απόσταση Levenshtein
- Το μεγαλύτερο κοινό
- Η μεγαλύτερη κοινή υποσυμβολοσειρά της υποακολουθίας
- Συντελεστής επικάλυψης
- Ratcliff-Obersβοηθούν την ομοιότητα
- Απόσταση Sorensen-Dice
- Συντελεστής Tanimoto
Χρήση:
Έκβαση:
(Τέλος)
|