Wie kann ich einen String "unscharf" Vergleichen?
Inhalt:
Wie macht es beispielsweise google, dass auch etwas gefunden werden kann, wenn es nicht zu 100% einem Muster entspricht?
Hier wird erklärt, wie es geht.
So genanntes Fuzzy Matching
Eine sehr schöne Möglichkeit, einen String zu vergleichen, aber ein gewisses Fehlerpotential zuzulassen ist das CPAN Modul String::Approx.
Hier ein kleines Beispiel:
#!/usr/bin/perl
use strict;
use warnings;
use String::Approx 'amatch';
my @inputs = qw/Peri-Community/;
my @matches = amatch("Perl-Community", @inputs);
print $_ . "\n" for @matches;
Ausgabe:
user@host~>perl fuzzy.pl
Peri-Community
Obwohl nach dem String Perl-Community gesucht wird, aber der String Peri-Community übergeben wurde, wird es trotzdem gematcht. Wenn bei amatch standardmäßig weniger als 10% des vorhandenen Strings ersetzt oder gelöscht werden muss, wird das Muster trotzdem erkannt. Vertippen kann sich schließlich jeder mal...
Ergänzungen, Kommentare
Anmerkungen:
- Mehr zur Fuzzy-Logik siehe Wikipedia.
- Näheres zum Modul String::Approx siehe CPAN.
--
ChristianDuehl - 19 Jul 2005
Weitere Module fuer approximatives Vergleichen:
- String::Similarity (siehe CPAN).
- String::Trigram (siehe CPAN).
--
PlTk - 19 Jul 2005
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff