Toxidrain: Strings auf gemeinsamkeit vergleichen

Hallo,

ich habe:

$text = "Hallo, dies ist ein sehr langer Text, aber der ist mir zu lang.";

$textB = "sehr langer Text, aber ist mir";

Nun möchte ich vergleichen, ob string $textB textstellen aus $text enthällt.

Habt ihr eine Idee, wie ich das machen kann ?

Ich hab mir gedacht:

$text =~ s/ //g; #löschen der Leerzeichen
$textB =~ s/ //g; #das gleiche
$text =~ s/\W//g; #löeschen von sonderzeichen
$textB =~ s/\W//g; #und wieder

nun würde ich gern aus $text Zeichen z.B. 5 bis 20 herausschneiden.
und dann:

if($textherausschnitt =~ /$textB/)
{
#enthällt textausschnitt.
}
else
{
#alles ok
}

Aber wie kann ich z.B. schneiden ?

Viele Grüße
Toxidrain

  1. hallo,
    imho müsstest du nicht die leerzeichen löschen, sondern gerade die verwenden um ganze wörter als zeichengruppe zu erkennen. diese zeichengruppe kannste ja dann mit dem ganzen zweiten string2 vergleichen. dann nimmst du die folgegruppe aus string1 und prüfst nach jedem treffer in string2 auf die existenz dieses folgewortes aus string1. ist diese abfrage falsch, kannste die suche an der stelle in string2 abbrechen. wenn du jetzt treffer erzeugst, musst du die ja extra zwischenspeichern und möglichst auch einen index dazu, weil dir die reinen treffer ohne den umgebenden text sicherlich nicht viel nützen werden, oder?

    mir scheint dies eine recht komplexe sache zu werden, zumindest wenn es in die richtung geht wie ich mir das vorstelle (mit nicht nur 10-wörter
    strings). schau dir mal die regular expressions von php an, bau einen anfang und dann komm mal mir einem stück code... ich finde, das kann man nicht mal eben so beantworten.

    andi

    1. oh nein, jetzt dachte ich auch noch es geht um php.

      sorry...

      *peinlich*

      ich sag heute nix mehr...

  2. use Mosche;

    $text = "Hallo, dies ist ein sehr langer Text, aber der ist mir zu lang.";

    $textB = "sehr langer Text, aber ist mir";

    Nun möchte ich vergleichen, ob string $textB textstellen aus $text enthällt.

    Was meinst du mit Textstellen? Reicht es hier auch, gleiche Wörter zu haben?

    Dann könntest du das etwa so machen (ungetestet):

    my @text  = split(/[, ]+/, $text);
    my @textb = split(/[, ]+/, $text);

    Statt Komma und Leerzeichen müssen hier alle Worttremmer aufgelistet sein-

    my $found = 0;

    foreach my $t (@text) {
      ++$found if grep { $t eq $_ } @textb;
    }

    Ansonsten definier mal näher, was du mit Textstellen meinst.

    use Tschoe qw(Matti);

    --
    neues Selftreffen?
    http://selfcommunity.teamone.de/foren/community/?t=2241&m=2687
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    1. Hallo,

      ich möchte vergleichen, ob z.B. ein Gedicht einfach kopiert und unter eigenem Namen aufgenommen wird.

      Dein Vorschlag sieht ganz gut aus, werd ich mal versuchen.

      Viele Grüße
      Toxicrain