2 Stimmen

Wie kann man erkennen, ob der statische Teil des Textes geändert wurde? (diff-Algorithmus-bezogen)

Zunächst einmal ist dies eine schwierige Sache zu lösen, so weit ich nicht kommen mit einem guten Beispiel, aber ich hoffe, dass jemand hier wird dies herausfinden. Ich hoffe, es gibt einen bekannten Weg, diese Art von Problemen zu lösen, oder einen obskuren Algorithmus.

Szenario:

  • In meiner Anwendung habe ich mehrere Anfragen an dieselbe Webseite
  • Die Webseite hat einen dynamischen und zufälligen Inhalt (z. B. Datum, Zitat des Tages usw., das theoretisch alles sein kann)
  • Die Antwort dieser Anwendung hat 2 Fälle, nennen wir sie "TRUE" und "FALSE". Zum Beispiel manchmal Antwort würde ein "True Text" manchmal wäre es "False Text" zurück.
  • Meine Anwendung kennt 3 Beispiele für den Fall "TRUE" und 3 Beispiele für den Fall "FALSE", die aber auch zufällige Inhalte wie "time" enthalten.

Herausforderung

  • Wenn meine Anwendung nun eine neue Antwort erhält, wie kann ich verstehen, ob diese Antwort ein Beispiel für einen "TRUE" oder "FALSE" Fall ist?

Was ich ausprobiert habe

  • Verarbeiten Sie die erste Stichprobe von TRUE case zeilenweise und erzeugen Sie ein ganzzahliges Array aus den Werten der Zeichen
  • Machen Sie dasselbe für die zweite TRUE-Probe
  • Machen Sie dasselbe für die dritte TRUE-Probe
  • Analysieren Sie die Unterschiede zwischen diesen gespeicherten TRUE-Fällen und erstellen Sie ein neues Array mit
  • Da ich nun weiß, welche Zeilen dynamisch sind (z. B. datetime), erstelle ich ein neues endgültiges Array TRUE case, das nur statische Zeilen in einem endgültigen Array TRUE case speichert.
  • Wenn ich nun einen neuen Fall habe, erstelle ich ein ähnliches Array und vergleiche es mit dem zuvor gespeicherten endgültigen TRUE-Fall, und wenn es übereinstimmt (mit Ausnahme der gefilterten Zeilen), ist es ein TRUE-Fall, wenn andere Zeilen massiv geändert werden ( es gibt einen Toleranzwert ), dann ist es FALSCH.

Die Grenzen und Schwächen dieses Algorithmus sind ziemlich offensichtlich. Ich habe zwar in einigen Fällen gute Ergebnisse erzielt, aber er funktioniert nicht immer wie erwartet.

Meine derzeitige Klasse funktioniert folgendermaßen:

Dim Analyser AS NEW ContentAnalyzer()
Analyser.AddTrueCase(True1Html)
Analyser.AddTrueCase(True2Html)
Analyser.AddTrueCase(True3Html)

'This will return True if the UnknownHtml is similar to TRUE case, otherwise False
Analyser.IsThisTrue(UnknownHtml) 

Tut mir leid, dass der Titel nicht viel Sinn macht, ich konnte keine gute Beschreibung dafür finden.

2voto

RossFabricant Punkte 11872

Es hört sich an, als würden Sie ziemlich einfache Dinge tun. Dokumentenklassifizierung . Dies ist ein stark erforschtes Gebiet, vor allem in letzter Zeit wegen der Spam-Filter. Informieren Sie sich in einer Bibliothek über die Klassifizierung von Dokumenten in der Sprache Ihrer Wahl.

Klassifikator4j sieht aus wie eine beliebte Bibliothek, die auf der Java VM läuft und nach .NET portiert wurde.

1voto

JB King Punkte 11972

Entweder ist das wirklich falsch dargestellt, oder ich verstehe einfach etwas nicht:

Die Anwendung fordert die Webseite an, erhält sie und muss feststellen, ob es sich um ein anderes "True" oder "False" handelt, richtig? Das heißt, ein Teil der Webanforderung ist nicht die Rückgabe von "True" oder "False" am Anfang, was mich zunächst verwirrt.

Zweitens, warum machen Sie nicht einen ähnlichen Vergleich für die falschen Fälle und sehen, ob es genügend Ähnlichkeiten gibt, um 3 Bereiche von Ergebnissen für eine beliebige Seite zu erstellen:

1) Seite ist der Wahrheit ähnlicher und wird daher als wahr angesehen.

2) Die Seite ist der falschen Seite ähnlicher und wird daher als falsch angesehen.

3) Die Seite ist weder dem einen noch dem anderen ähnlicher, so dass das Ergebnis so etwas wie eine Null- oder Ausnahmesituation ist, da es nicht möglich ist zu erkennen, welches Ergebnis sinnvoll ist.

Beispiel für den 3. Fall, der eintreten könnte: Angenommen, die Seite enthält eine ganze Zahl, und wenn sie positiv ist, ist das Ergebnis wahr, wenn sie negativ ist, ist das Ergebnis falsch. Was ist, wenn das Ergebnis 0 ist? Zählt 0 als positiv, da es gleich seinem absoluten Wert ist, oder zählt es aus irgendeinem Grund als negativ?

Oder verstehe ich nicht ganz, worauf Sie hier hinauswollen?

0voto

Svante Punkte 49287

Vielleicht meinen Sie so etwas wie Bayes'sche Filterung? Sie könnten sich ansehen, was Paul Graham mit Spam gemacht hat: http://www.paulgraham.com/better.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X