Einzelnen Beitrag anzeigen

Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
848 Beiträge
 
Delphi 11 Alexandria
 
#1

Unit ApproxStrUtils

  Alt 13. Mai 2008, 16:20
ApproxStrUtils
Version 0.1

Diese Unit stellt einige Funktionen bereit, mit deren Hilfe man einen String in einem anderen suchen kann. Das geht mit Pos, PosEx, AnsiContainsStr, und dem ganzen Krempel. Klar, kein Problem. 8)

Aber was macht man, wenn man auch ein paar Rechtschreibfehler erlauben will? Man sucht z.B. nach "Schifffahrt", aber der Text, in dem gesucht wird, benutzt die alte Rechtschreibung, so dass immer nur von "Schiffahrt" die Rede ist? Dann ist man hiermit genau richtig.

Diese Unit stellt einige Funktionen bereit, mit denen ein Text nach einem Muster abgesucht wird, wobei eine gewisse Anzahl von Fehlern erlaubt ist. Ein "Fehler" ist dabei:
  • Ein Einfügen eines Zeichens
  • Ein Entfernen eines Zeichens
  • Ein Ändern eines Zeichens
Für die Informatiker: Hier gehts also um die Edit- oder Levenshtein-Distanz.

Folgende Funktionen werden bereitgestellt:

function ApproxDistance(const AText, AOther: string): Integer; Berechnet die Edit-Distanz der beiden Strings.

function ApproxResemblesText(const AText, AOther: string; MaxError: Integer = 1): Boolean; Bestimmt, ob der eine String ähnlich zu dem anderen gemäß der Edit-Distanz ist.

function ApproxContainsStr(const AText, ASubText: string; MaxError: Integer = 1): Boolean; Bestimmt, ob der Subtext im Text mit höchstens MaxError Fehlern gemäß der Edit-Distanz enthalten ist. Groß- und Kleinschreibung wird berücksichtigt.

function ApproxContainsText(const AText, ASubText: string; MaxError: Integer = 1): Boolean; Bestimmt, ob der Subtext im Text mit höchstens MaxError Fehlern gemäß der Edit-Distanz enthalten ist. Groß- und Kleinschreibung wird nicht berücksichtigt.

function ApproxPosEx(const AText, ASubText: string; Offset: Integer; Out Count: Integer; MaxError: Integer = 1): Integer; Gibt den Startindex eines Vorkommens des Subtextes im Text mit höchstens MaxError Fehlern gemäß der Edit-Distanz. Der Text wird ab der Position Offset durchsucht. Der Out-Parameter Count enthält die Länge des gefunden Vorkommens (z.B. zur Benutzung in copy).

function ApproxPos(const AText, ASubText: string; Out Count: Integer; MaxError: Integer = 1): Integer; Dasselbe wie ApproxPosEx mit Offset=1.

function ApproxBestAppearance(const AText, ASubText: string; out Count, BestError: Integer): Integer; Liefert den Startindex des ersten Vorkommens mit minimaler Fehlerzahl zurück. Die Out-Parameter Count und BestError geben die Länge des Vorkommens bzw. die Anzahl der Fehler an.

Ich hoffe, ich habe unsinnige Eingaben soweit wie möglich abgefangen, sodass dann trotzdem was halbwegs sinnvolles als Ergebnis geliefert wird. Prinzipbedingt findet ApproxPosEx nicht wirklich alle Vorkommen (wird auch in der Demo klar), aber wenn das gesuchte Wort irgendwo ungefähr auftaucht, dann wird das auch gefunden.

Fehler und Verbesserungsvorschläge sind wie immer willkommen.
Angehängte Dateien
Dateityp: zip approxstrutils_demo_160.zip (6,1 KB, 65x aufgerufen)
Dateityp: pas approxstrutils_118.pas (15,2 KB, 70x aufgerufen)
The angels have the phone box.
  Mit Zitat antworten Zitat