Anfänger braucht Hilfe - Texte auf Ähnlichkeit überprüfen

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.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Anfänger braucht Hilfe - Texte auf Ähnlichkeit überprüfen

Beitragvon stigi » Dienstag 4. April 2006, 09:22

Ich hab folgendes Problem:
Ich habe eine Access Datenbank die ich mit Python durchsuchen muss. Es gibt eine Spalte namens InfoText und eine Spalte namens InfoNr. Jeder InfoText bezieht sich auf eine InfoNr. So ist die InfoNr 13 z.b. InfoText "Schmelzen_ct1"
Jetzt muss ich mit Python diese Spalten durchsuchen und herausfinden ob der InfoText zu der InfoNr passt. Wenn jetzt jemand z.B. den InfoText falsch geschrieben hat ( "Shcmelzen_ct1" ) soll python eine Warnung ausgeben und den Schreibfehler korrigieren. Sollte allerdings der Text total unterschiedlich sein, also z.b. "Löten_ct2" soll eine Errormassage kommen und der Fehler nicht korrigiert werden.

Jetzt geht es mir aber vorerst nur um den Vergleich zweier Texte. Sagen wir einfach mal 2 strings. 2 strings werden von Tastatur eingelesen und sollte sich String 2 von String 1 nur in einem oder 2 Buchstaben unterscheiden soll String 1 überschrieben werden, wenn es mehr Unterschiede gibt sollen beide beibehalten werden und eine Nachricht ausgegeben werden. Wie geh ich das am besten an?

danke im Vorraus :oops:
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Dienstag 4. April 2006, 09:23

--- Heiko.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Re: Anfänger braucht Hilfe - Texte auf Ähnlichkeit überprüfe

Beitragvon N317V » Dienstag 4. April 2006, 09:33

Hallo stigi,

stigi hat geschrieben:Es gibt eine Spalte namens InfoText und eine Spalte namens InfoNr. Jeder InfoText bezieht sich auf eine InfoNr. So ist die InfoNr 13 z.b. InfoText "Schmelzen_ct1"


Schlechtes Datenbankdesign! Sagt Dir der Begriff 'Normalisierung' etwas?
http://de.wikipedia.org/wiki/Normalisie ... tenbank%29

stigi hat geschrieben:Jetzt geht es mir aber vorerst nur um den Vergleich zweier Texte. Sagen wir einfach mal 2 strings. 2 strings werden von Tastatur eingelesen und sollte sich String 2 von String 1 nur in einem oder 2 Buchstaben unterscheiden soll String 1 überschrieben werden, wenn es mehr Unterschiede gibt sollen beide beibehalten werden und eine Nachricht ausgegeben werden. Wie geh ich das am besten an?


Obwohl Du mit der zweiten Normalform (siehe Link oben) das Problem wohl gar nicht hättest: such mal nach "Levenshtein".
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Dienstag 4. April 2006, 09:35

@modelnine: Interessant, dass ich für meinen Beitrag eine Minute gebraucht hab und Du für Deinen 10 Minuten. :lol:
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Dienstag 4. April 2006, 09:38

Normalisierung sagt mir leider nichts, die Datenbank ist auch nicht von mir, das was ich geschrieben hatte war nur ein Beispiel und entspricht nicht dem orginial welches ich zu bearbeiten habe. Das haben andere Leute geschrieben und ich denk mal das die davon mehr Ahnung haben als ich :lol: die wollen nur das ich ne "schwierigere" aufgabe habe um mich besser in python einzulernen.

kann mir jemand ein anwendungsbeispiel geben zu dem ersten link ?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Dienstag 4. April 2006, 09:57

Das Modul aus:

http://svn.modelnine.org/svn/levenshtein

auschecken, dann kompilieren, installieren (siehe den Link, für Geschwindigkeit mit -O3 kompilieren wie's da steht), und ausprobieren:

Code: Alles auswählen

print levenshtein.levenshtein("test","temp")


Der Levenshtein-Algorithmus gibt eine Distanz zurück, die die Ähnlichkeit zwischen zwei Strings ausdrückt. Je kleiner die Distanz, desto ähnlicher sind sie. Für eine genauere Beschreibung was der Algorithmus macht und was er zurückliefert, siehe (z.B.) Wikipedia.

Vielleicht solltest Du die beiden Strings vorher noch "normalisieren," bevor Du sie durch Levenshtein durchjagst, da Groß-/Kleinschreibung als unterschiedliche Werte angesehen werden, bei manchen RDBMs aber als Spalten-/Tabellenname dieses eben irrelevant ist.
--- Heiko.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Dienstag 4. April 2006, 09:59

PS: Wenn's Dir nicht um Geschwindigkeit geht kannst Du den Levenshtein-Algorithmus natürlich auch in Python implementieren (oder nach einer Implementierung suchen), dann hast Du keine äußeren Abhängigkeiten.
--- Heiko.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Dienstag 4. April 2006, 13:45

hab das jetzt mal versucht, sicherlich komplett falsch, deswegen gehts auch net ;P

folgender fehler kommt in der commandline

Y:\Mitarbeiter\mustermapa\pythonwin>setup.py -vv -s "import levenshtein" \ "lev
enshtein.levenshtein(\"hello\",\"heike\")"
File "Y:\Mitarbeiter\mustermapa\pythonwin\setup.py", line 1
from distutils.core import setup Extension
^
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Dienstag 4. April 2006, 14:42

Ich versteh nicht ganz was Du da machst... Hast Du einen C-Compiler installiert? Wenn ja, dann solltest Du über distutils die Erweiterung installieren können, wenn nein, dann nicht. Dann mußt Du, wie ich in meinem letzten Beitrag sagte, entweder den Levenshtein-Algorithmus in purem Python suchen (auch nicht weiter schwer, siehe zum Beispiel Google), oder aber ihn selbst implementieren (genausowenig schwer, siehe zum Beispiel Wikipedia für eine Beschreibung des Algorithmus), auch in Pure-Python.
--- Heiko.
BlackJack

Re: Anfänger braucht Hilfe - Texte auf Ähnlichkeit überprüfe

Beitragvon BlackJack » Mittwoch 5. April 2006, 07:03

stigi hat geschrieben:Jetzt muss ich mit Python diese Spalten durchsuchen und herausfinden ob der InfoText zu der InfoNr passt. Wenn jetzt jemand z.B. den InfoText falsch geschrieben hat ( "Shcmelzen_ct1" ) soll python eine Warnung ausgeben und den Schreibfehler korrigieren. Sollte allerdings der Text total unterschiedlich sein, also z.b. "Löten_ct2" soll eine Errormassage kommen und der Fehler nicht korrigiert werden.


Das automatische korrigieren würde ich lassen. Man sollte Nutzer gar nicht erst daran gewöhnen, das "kleine" Fehler durchgehen. Dann sehen die keine Veranlassung ihre Eingabe zu Korrigieren. Warnungen werden gerne ignoriert wenn das richtige Ergebnis am Ende herauskommt.

Ausserdem musst Du natürlich aufpassen, dass Du nichts "falsch" korrigierst.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Donnerstag 6. April 2006, 07:33

das programm soll nicht parallel zur eingabe laufen. die user schreiben tagsüber ihre daten in die access tabelle und über nacht läuft das python programm drüber, korrigiert wenn nötig und gibt eine logfile dazu aus. die user selbst bekommen davon nichts mit
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Donnerstag 6. April 2006, 07:55

stigi hat geschrieben:das programm soll nicht parallel zur eingabe laufen.


Die zeitliche Verschiebung ändert überhaupt nichts an der von BlackJack angesprochenen Problematik.

stigi hat geschrieben:die user selbst bekommen davon nichts mit


Eben. Wie gesagt: sauber normalisieren und das Problem mit falschen Schlüsseln tritt erst gar nicht auf.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Donnerstag 6. April 2006, 08:29

ja für die zukunft is das ja ok mit dem normalisieren, aber die datenbanken existieren nunmal schon - mit den fehlern - und die müssen behoben werden.
stigi
User
Beiträge: 64
Registriert: Dienstag 4. April 2006, 07:05

Beitragvon stigi » Donnerstag 6. April 2006, 09:03

ich hab mir jetzt diese file
http://trific.ath.cx/Ftp//python/levens ... 0.1.tar.gz

runtergeladen, ich weiß leider trotzdem nicht wie ich sie verwenden soll :oops:
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Beitragvon N317V » Donnerstag 6. April 2006, 10:27

http://trific.ath.cx/Ftp//python/levenshtein/python-Levenshtein-0.10.1.tar.gz


OT: Interessanterweise bekomme ich da auch den transformation_error. Hab's aber gerade nochmal bei sourceforge getestet. Dort kann ich tar.gz-Dateien problemlos runterladen. :?:

Was mir bei dieser URL grad auffällt ist der Doppelslash nach "Ftp"...
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]