JeSchnell: [Regex] wiederhollte sätze entfernen

Beitrag lesen

hi,

beispiele:

"Der Text ist fast gleich wie der andere"
"Dieser Text ist etwa genauso gleich wie der andere oben"

Wie kann ich es realisieren das nur ein text stehen bleibt ?

erst mal musst du dir überlegen, ob es dir auf die Zeichenunterschiede oder auf die Wortunterschiede ankommt. Jedoch wäre meiner Meinung nach bei beiden Möglichkeiten nicht mit Regexen zu arbeiten.
  a) Zeichenunterschiede: Hier müsstest du mit cmp-Funktionen (= Zeichenkettenvergleichsfunktionen) arbeiten, mit abs() die Rückgabe auf einen positiven Wert trimmen und das Löschen eines Strings dann mit if($Unterschied <= $Tolleranzbereich) abhängig machen.
  b) Wortunterschiede (die Wortreihenfolge wird nicht beachtet): Hier könntest du dir mit str_word_count (Format 1) alle Worte der Satzstrings ausgeben lassen und diese dann mit array_merge() zusammenführen. Mit array_unique() entfernst du dann doppelte Werte und danach lässt sich das Löschen eines Strings mit if(count($Array) <= $Tolleranzbereich) äbhängig machen.

Falls bei dir standardmäßig die Sätze in einem String zusammengefasst werden, müsstest du mit preg_split('/([\.!\?])\s([A-ZÄÖÜ])/', $Text, -1, PREG_SPLIT_DELIM_CAPTURE) den Text in Sätze aufteilen. Leider könnten somit auch Abkürzungen vor einem Hauptwort als Satztrennungen aufgefasst werden. Außerdem besteht jetzt auch der Satz-"string" aus mehreren Teilen des Arrays, welche erst mühsam mit for() und + (Arrayoperator) zusammengesetzt werden müssen.

lg JeSchnell