Seite 1 von 1
Texte aus Datenbank analysieren
Verfasst: 11. April 2006 09:50
von oberschlingel
Hallo,
ich habe folgende Aufgabe und frage mich, wie ich sie am besten bewältige:
Es besteht eine SQLITE-Datenbank mit einer Textetabelle mit ca. 80 Datensätzen. Jeder Datensatz hat eine ID und einen beliebig langen Text (ca. 200 Zeichen). In einer weiteren Tabelle stehen 60 Datensätze. Eine ID und diesmal nur ein Zeichen (ein Char - Alphabet gross + Alphabet klein + einige Sonderzeichen).
Nun muss ich aus der Textetabelle alle Texte filtern, die ein Zeichen (oder am besten gleich mehrere Zeichen) aus der anderen Tabelle am häufigsten beinhalten.
Um das ganze vielleicht leichter zu verstehen: Lösungvorschlag 1 ->
Lösungsvorschlag 1:
Eine weitere Tabelle in der Datenbank, mit den 60 Zeichen und der ID aus der Textetabelle als Spalten. Dann alle Texte einfach mit einem index (text[x]) durchlaufen, analysieren und die Anzahl der vorkommenden Zeichen in der jeweiligen Spalte speichern. Dann könnte man zur Laufzeit über eine SQL-Abfrage einfach die Tabelle nach einem Zeichen sortieren und hätte so die Id des Textes, in dem das Zeichen am häufigsten vorkommt.
Unschön: die dritte (Analyse-)Tabelle muss zu Beginn einmal generiert werden, die zwei anderen dürfen sich danach nicht mehr verändern.
Lösungvoschlag 2:
Eigentlich wie Lösungvorschlag 1, allerdings mit einer virtuellen Liste, die man zur Laufzeit füllt. Ich denke aber, so eine Analyse benötigt zu viel Zeit. Zudem wüsste ich nicht, welche Art von Liste ich verwenden sollte. Ideen?
Lösungvorschlag 3:
Das ganze mit Regular Expressions lösen. Mmmh. Da hab ich leider keine Ahnung von. Wäre super, wenn hier jemand einen kurzen Tipp geben könnte, ab das damit vielleicht ganz leicht

zu lösen ist.
Gibt es evtl. noch andere Lösungvoschläge?
Vielen Dank für etwaige Antworten,
viele Grüße!
Re: Texte aus Datenbank analysieren
Verfasst: 11. April 2006 10:26
von Shadow
oberschlingel hat geschrieben:
[..cut..]
Lösungvorschlag 3:
Das ganze mit Regular Expressions lösen. Mmmh. Da hab ich leider keine Ahnung von. Wäre super, wenn hier jemand einen kurzen Tipp geben könnte, ab das damit vielleicht ganz leicht

zu lösen ist.
Gibt es evtl. noch andere Lösungvoschläge?
Da kommen wir der Sache schon näher, aber:
Wie wär's einfach mit einer SQL-Abfrage?
Diese präsentiert entsprechende Sucheergebnisse entweder absteigend oder aufsteigend und Du musst entsprechende temporäre Tabelle nur noch auslesen.
Verfasst: 11. April 2006 10:52
von oberschlingel
Danke für die Antwort, aber ich glaube Du hast mich nicht ganz richtig verstanden:
Eine SQL-Abfrage, das ist klar. Aber es geht ja um das, was ich abfragen muss. Kennst Du eine Abfrage, die sagt, wie oft ein bestimmter Buchstabe im String einer Spalte zu finden ist?
Wenn nicht, muss ich doch irgendwie eine Tabelle mit 60 Spalten erzeugen, die ich vorher fülle, indem ich die Texte mit einem Algorithmus analysiere. In jeder Spalte steht dann die Anzahl, wie oft der jeweilige Buchstabe (=Spaltename) im String vorkommt.
Am liebsten wäre mir eine schlaue "Regular Expression", mit der ich zur Laufzeit schnell die Texte analysieren könnte.
Verfasst: 11. April 2006 12:02
von Shadow
oberschlingel hat geschrieben:Danke für die Antwort, aber ich glaube Du hast mich nicht ganz richtig verstanden:
Eine SQL-Abfrage, das ist klar. Aber es geht ja um das, was ich abfragen muss. Kennst Du eine Abfrage, die sagt, wie oft ein bestimmter Buchstabe im String einer Spalte zu finden ist?
Wenn nicht, muss ich doch irgendwie eine Tabelle mit 60 Spalten erzeugen, die ich vorher fülle, indem ich die Texte mit einem Algorithmus analysiere. In jeder Spalte steht dann die Anzahl, wie oft der jeweilige Buchstabe (=Spaltename) im String vorkommt.
Am liebsten wäre mir eine schlaue "Regular Expression", mit der ich zur Laufzeit schnell die Texte analysieren könnte.
Und ob ich Dich verstanden habe - beste Lösung: SQL-Abfrage schreiben, die genau das macht und anschließend einfach nur noch die Ergebniszeilen auslesen und auswerten. Mit Regular-Expressions ist dies zwar auch möglich, aber damit würdest du den Bock zum Gärtner machen und die Vorteile einer Datenbank über den Haufen schmeißen.
Verfasst: 11. April 2006 20:53
von patrik08
sqlite ist maechtig um funktionen in die db zu erstellen... fast besser als mysql..
http://www.sqlite.org/capi3ref.html#sql ... function16
in php habe ich mal eine md5 funktion in diese sql db reingehauen dann konnte man mit query select from ... where md5(vars) ohne andere grosse eingriffen
aber ich denke nicht das es qt plug-in kann ....(kann sein das ich mir gross irre) ich benutze einfach die statische sqlite3 libs... so wie der qt3 sqlite-browser wo alle sqlite funktionen zugreifbar-nahe sind..
Verfasst: 11. April 2006 22:16
von oberschlingel
Danke für die Anregung Patrik08, leider kann ich mir nicht annähernd vorstellen, wie ich mit Hilfe dieser "sqlite3_create_function"-Funktion eine Funktion in mein SQLITE integrieren soll.
Hättest Du hier vielleicht ein kurzes Beispiel parat?
Da wäre ich super dankbar!
Grüße!
Verfasst: 12. April 2006 15:13
von patrik08
Eins von meinen wichtiges werkzeug bei php c++ oder ajax uns...
ist und bleibt :
Firefox der Browser nr1 fuers netz.. (
http://www.mozillaitalia.org/firefox/ )
2 - einmal installiert gehst du auf
https://addons.mozilla.org/extensions/ um eine ahnung zu haben was eine firefox addons ist..
3 - besuch der seite
http://mycroft.mozdev.org/download.html ... category=9
ist sehr lang die seite .... CTR+F suche "c++" installierst alle suchmaschinen die ueber c++ handleln koders.com ist die beste
dan nach einem neuen start von firefox hast du rechts oben ein such fester mit koders c++ .... suche "sqlite3_create_function" und voila.. 4 resultate.... mit beispiele die ersten 3 sind gut... naturich findest du auch qtnamen classen ecc. name classe qt3/4 mit massenweise beispielen...
Dass soll heissen !Nicht das ich dir keine beispiele schreiben will .. sonder
wenn man sie selber probierts und die doku gelesen hat und die beispiele
probiert hat .... kennt man die funktionsweise davon und wen bei einem beispiel was schief gehst ... kanst du dann immer noch iher fragen...
( ich bin und bleibe ein autoditakt -self lerning teorie e praxies ..) in einen
abend habe ich den source von
http://sqlitebrowser.sourceforge.net/ in 4 stunden gelesen und getestet ... mit qt3 (muss einfach die $PATH aendern dan kann ich qt3 & qt4 schreiben lesen und builden) aber nun kenne ich die grenze von sqlite... bei der quelle...
Verfasst: 12. April 2006 15:23
von oberschlingel
Ok, vielen Dank.
Ich installiere jetzt die Suchmaschine, bin gespannt auf die Ergebnisse.
Wenn ich ein taugliches Beispiel finde, stelle ich es hier ab.
Danke an alle!
Verfasst: 12. April 2006 15:43
von patrik08
aus
http://souptonuts.sourceforge.net/readm ... orial.html
in diese funktionen ist es fast wie in einer static void...
oder eben auch sqlquery
select id from table a where id > 0 limit 1 (als function)
dan in der query b
select * from table b where blobid == msignFunc
Code: Alles auswählen
void msignFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
assert( argc==1 );
switch( sqlite3_value_type(argv[0]) ){
case SQLITE_INTEGER: {
long long int iVal = sqlite3_value_int64(argv[0]);
iVal = ( iVal > 0) ? 1: ( iVal < 0 ) ? -1: 0;
sqlite3_result_int64(context, iVal);
break;
}
case SQLITE_NULL: {
sqlite3_result_null(context);
break;
}
default: {
double rVal = sqlite3_value_double(argv[0]);
rVal = ( rVal > 0) ? 1: ( rVal < 0 ) ? -1: 0;
sqlite3_result_double(context, rVal);
break;
}
}
}
This function is initiated as follows:
sqlite3_create_function(db, "msign", 1, SQLITE_UTF8, NULL,
&msignFunc, NULL, NULL));
Note that "msign" is the name of the function in sqlite3. It is the name you would use in a select statement: "select msign(3);". The 1 is the number of arguments. The msign function here only takes one argument. SQLITE_UTF8 is for the text representation. Then, skipping over NULL, &msignFunc is the name of the C function. The last two values must be NULL for a simple function; again, a simple function can be used in any part of the select where clause. .....
Verfasst: 12. April 2006 18:18
von oberschlingel
Vielen Dank patrik08!!!!
Wahnsinn, so eine Suchmaschine wie Coders habe ich schon lange gebraucht.
Eine super Erweiterung für Programmierer zum bekannten Foren durchsuchen.
Schätze, es ist schwach, dass ich das nicht schon länger kenne.