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

UtilFaqSubForm edit

Titel Wie kann ich einen String teilweise Vergleichen?
Autor IngoW
Bereich FaqStrings
Topic revision: 2005-07-19, PlTk
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.