Frage zu Textvergleich (performant)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
.exe
User
Beiträge: 27
Registriert: Mittwoch 14. Januar 2009, 11:16

Hi,

ich bastel zur zeit an einem modul welches 2 beliebige texte (format egal) einliest und den eingelesen Inhalt vergleicht. Soweit so gut nicht sehr schwer.
Doch der knackpunkt ist, dass der vergleich performant sein sollte. Das heist wenn ich zb. Text A (ca 10000 Wörter) mit text B (50000 wörte) auf übereinstimmungen im Inhalt überprüfen möchte dauert das ewig und drei tage (zz 13 Stunden 41min und 12sek :wink: ).

So jetzt meine Frage hat sich schon mal wer mit vergleichs algorythmik im bereich texten befasst und kann mir da sinnfolle tips geben wie man am beseten texte auf Inhalt und oder ähnlichen inhalt vergleicht.

Ich mach das zur zeit so, dass ich immer einen satz (wort für wort) aus der kleineren datei in eine liste lade und diese dann auf inhaltlich satz für satz mit dem größeren dokument vergleiche. Sollten mehr als 50% der liste mit dem vergleichssatz übereinstimmen gibt es ein treffer. Sollte keine übereinstimmung vorhanden sein gibt es kein treffer und der nechste satz wird geladen.

Also über hilfe wie das ganze performanter geht wer ich sehr dankbar.

MFG

.exe
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Also du könntest einen Index über den grösseren Text erstellen, im Stil von:

Code: Alles auswählen

index = set()
for satz in grosser_text:
    index.add(satz)
Die abfrage gestaltet sich dann einfach:

Code: Alles auswählen

for satz in kleiner_text:
    if satz in index:
        print 'Satz vorhanden'
Am besten noch die Sätze vorher in Kleinbuchstaben konvertieren und alle Sonerzeichen herauslöschcen.


Die Suche ist so aber recht eingeschränkt, da nur genau gleiche Sätze gefunden werden.

Gruss
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Vielleicht solltest du uns zunächst mal sagen, was genau du mit Ähnlichkeit meinst. Da gibt es nicht nur ein Maß.

P.S.: Es heißt Algorithmik, das Ding hat nichts mit Rhythmus zu tun ;-)
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Es gibt ja auch noch das diff-Modul in Python. Evtl. hilft das weiter?
.exe
User
Beiträge: 27
Registriert: Mittwoch 14. Januar 2009, 11:16

EyDu hat geschrieben: P.S.: Es heißt Algorithmik, das Ding hat nichts mit Rhythmus zu tun ;-)
:lol: oh man da musste ich jetzt echt über mich selbst lachen ^^.

Naja habe per PM nen tipp mit der difflib bekommen.
Soweit ich mir das jetzt angeschaut habe ist das genau das was ich umsetzten wollte.
Werde jetzt mal nen bissel damit spielen und dann hier meine ergebniss posten.

mfg

.exe

*edit* Hyperion war schneller als ich xD
Antworten