Python – Unterschied zwischen zwei Strings

Ich möchte eine Menge Worte in einer Liste speichern. Viele dieser Worte sind sehr ähnlich. Zum Beispiel habe ich Wort afrykanerskojęzyczny und viele Worte wie afrykanerskojęzycznym , afrykanerskojęzyczni , nieafrykanerskojęzyczni . Was ist die effektive (schnelle und geben kleine Diff-Größe) Lösung, um Unterschied zwischen zwei Strings zu finden und zweiten String von der ersten und diff zu wiederherstellen?

  • Python difflib: Hervorhebung Unterschiede inline?
  • Gibt es eine Python-API zum Zeichnen von Diagrammen (die Linien verwenden, um entsprechende Werte zwischen zwei Listen zu verbinden)
  • Erzeugung und Anwendung von diffs in Python
  • Textunterschied Algorithmus
  • Ist der Python-Code in Ordnung
  • Vergleichen Sie zwei Textdateien, um Unterschiede zu finden und sie in eine neue Textdatei auszugeben
  • Python (numpy) lese eine Textdatei mit gemischtem Format
  • Lesen einer Datei ohne Zeilenumbrüche
  • Wie lese ich eine Datei Zeile-für-Zeile in eine Liste?
  • Bring String in Liste der Zeichen in Python
  • Python readlines () Nutzung und effiziente Praxis zum Lesen
  • Enthält readlines () eine Liste oder einen Iterator in Python 3?
  • 4 Solutions collect form web for “Python – Unterschied zwischen zwei Strings”

    Sie können ndiff im difflib-Modul verwenden, um dies zu tun. Es hat alle notwendigen Informationen, um einen String in einen anderen String umzuwandeln.

    Ein einfaches Beispiel:

     import difflib cases=[('afrykanerskojęzyczny', 'afrykanerskojęzycznym'), ('afrykanerskojęzyczni', 'nieafrykanerskojęzyczni'), ('afrykanerskojęzycznym', 'afrykanerskojęzyczny'), ('nieafrykanerskojęzyczni', 'afrykanerskojęzyczni'), ('nieafrynerskojęzyczni', 'afrykanerskojzyczni'), ('abcdefg','xac')] for a,b in cases: print('{} => {}'.format(a,b)) for i,s in enumerate(difflib.ndiff(a, b)): if s[0]==' ': continue elif s[0]=='-': print(u'Delete "{}" from position {}'.format(s[-1],i)) elif s[0]=='+': print(u'Add "{}" to position {}'.format(s[-1],i)) print() 

    Drucke:

     afrykanerskojęzyczny => afrykanerskojęzycznym Add "m" to position 20 afrykanerskojęzyczni => nieafrykanerskojęzyczni Add "n" to position 0 Add "i" to position 1 Add "e" to position 2 afrykanerskojęzycznym => afrykanerskojęzyczny Delete "m" from position 20 nieafrykanerskojęzyczni => afrykanerskojęzyczni Delete "n" from position 0 Delete "i" from position 1 Delete "e" from position 2 nieafrynerskojęzyczni => afrykanerskojzyczni Delete "n" from position 0 Delete "i" from position 1 Delete "e" from position 2 Add "k" to position 7 Add "a" to position 8 Delete "ę" from position 16 abcdefg => xac Add "x" to position 0 Delete "b" from position 2 Delete "d" from position 4 Delete "e" from position 5 Delete "f" from position 6 Delete "g" from position 7 

    Was du verlangst, ist eine spezialisierte Form der Kompression. Xdelta3 wurde für diese besondere Art von Kompression entworfen, und es gibt eine Python-Bindung für sie, aber man konnte vermutlich mit zlib direkt aussteigen. Sie möchten zlib.compressobj und zlib.decompressobj mit dem zdict Parameter auf Ihr " afrykanerskojęzyczny " setzen, zB afrykanerskojęzyczny .

    Caveats sind zdict wird nur in Python 3.3 und höher unterstützt, und es ist am einfachsten zu kodieren, wenn Sie das gleiche "Basiswort" für alle Ihre Diffs haben, was kann oder auch nicht sein, was Sie wollen.

    Sie können in das Regex-Modul (der Fuzzy-Abschnitt) schauen. Ich weiß nicht, ob Sie die tatsächlichen Unterschiede bekommen können, aber zumindest können Sie die zulässige Anzahl von verschiedenen Arten von Änderungen wie Einfügen, Löschen und Ersetzungen angeben:

     import regex sequence = 'afrykanerskojezyczny' queries = [ 'afrykanerskojezycznym', 'afrykanerskojezyczni', 'nieafrykanerskojezyczni' ] for q in queries: m = regex.search(r'(%s){e<=2}'%q, sequence) print 'match' if m else 'nomatch' 

    Die Antwort auf meinen Kommentar oben auf die Ursprüngliche Frage lässt mich denken, das ist alles, was er will:

     loopnum = 0 word = 'afrykanerskojęzyczny' wordlist = ['afrykanerskojęzycznym','afrykanerskojęzyczni','nieafrykanerskojęzyczni'] for i in wordlist: wordlist[loopnum] = word loopnum += 1 

    Dies wird Folgendes tun:

    Für jeden Wert in der Wortliste setzen Sie den Wert der Wortliste auf den ursprünglichen Code.

    Alles, was Sie tun müssen, ist, dieses Stück Code zu setzen, wo Sie die Wortliste ändern müssen, um sicherzustellen, dass Sie die Wörter speichern, die Sie in der Wortliste ändern müssen, und dass das ursprüngliche Wort korrekt ist.

    Hoffe das hilft!

    Python ist die beste Programmiersprache der Welt.