2017-01-04 8 views
1

Ich habe die folgende Zeichenfolge:Wie vergleicht man diese Strings in Python?

1679.2235398,-1555.40390834,-1140.07728186,-1999.85500108 

und ich bin eine Steganografie-Technik speichern in einem Bild. Jetzt, wenn ich es wieder aus dem Bild herausgeholt habe, habe ich es manchmal in einer vollständigen Form zurückbekommen, und damit habe ich kein Problem. Wo in anderen Gelegenheiten werden die abgerufenen Daten nicht vollständig abgerufen (aufgrund einer Änderung/Änderung auf dem Bild aufgetreten ist), so sieht das Ergebnis ungefähr so:

1679.2235398,-1555.I8\xf3\x1cj~\x9bc\x13\xac\x9e8I>[a\xfdV#\x1c\xe1\xea\xa0\x8ah\x02\xed\xd1\x1c\x84\x96\xe2\xfbk*8'l 

Beachten Sie, dass nur „1679,2235398, -1555 . " werden korrekt abgerufen, während der Rest die Änderung betrifft. Nun, wie berechne ich (in Prozent), wie viel ich erfolgreich abgerufen? Da die Länge nicht identisch ist, kann ich keinen zeichenweisen Vergleich durchführen, es scheint, dass ich die geänderten Daten in ein anderes Formular schneiden oder konvertieren muss, um die Länge der Originaldaten zu erreichen.

Irgendwelche Tipps?

+1

Funktioniert es nicht, den Prozentsatz der ursprünglichen Zeichenfolge zu verwenden, die in der Ausgabe angezeigt wird? – JETM

+0

Nein sicher, ich habe, was du meinst, aber was ich will, ist etwas wie das: ist 1 = 1, ist 6 = 6, und so weiter. – amsr

Antwort

0

Eine Menge davon hängt vom Kontext Ihres Problems ab, aber Sie haben hier eine Reihe von Optionen.

Wenn Ihre Ergebnisse immer so aussehen, können Sie einfach die longest common subsequence finden, dann durch die Länge der ursprünglichen Zeichenfolge für einen Prozentsatz dividieren.

Levenshtein distance ist eine gängige Methode zum Vergleichen von Strings, da die Anzahl der Zeichen geändert werden muss, um einen String in einen anderen zu verwandeln. This question hat mehrere Antworten, die besprechen, wie man das in einen Prozentsatz umwandelt.

Wenn Sie nicht erwarten, dass die Strings immer in der gleichen Reihenfolge erscheinen, schlägt this answer einige Algorithmen vor, die für die DNA-Arbeit verwendet werden.

+0

Sehr interessante Methoden. Ich werde beide ausprobieren und sehen, wie die Ergebnisse aussehen. Danke JERM – amsr

0

Nun, es hängt wirklich .. Meine Lösung so etwas wie dies würde:

ich mit allen der längsten Zeichenfolge möglich und prüfen, ob sie in der neuen Zeichenfolge if original_string in new_string: 'something happens here'. , die in einer Schleife beginnen würde, wären, dass Wld verringert die Größe der ursprünglichen Zeichenfolge und ermöglicht alle Kombinationen. Also sollte die nächste N-1 lang sein und 2 mögliche Kombinationen haben (Abschneiden der ersten Nummer oder der letzten Nummer), und so weiter, bis Sie zu einer bestimmten Schwelle kommen, oder zu 1 langen Strings.
Die Schleife kann die längste Zeichenfolge speichern, die Sie in einem Protokoll in der If-Bedingung finden, und anschließend können Sie einfach die Ergebnisse überprüfen. Ich hoffe, das hilft.

+0

Es scheint, dies ist ein guter Ansatz, um es anzugehen. Vielen Dank, ich werde es testen. – amsr

Verwandte Themen