Wie kann ich eine geordnete Liste der häufigsten Substrings innerhalb meiner MySQL varchar Spalte erstellen?

StackOverflow https://stackoverflow.com/questions/248864

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe eine MySQL-Datenbank-Tabelle mit ein paar tausend Zeilen. Der Tisch ist Setup wie folgt:

id | text

Die id Spalte eine automatisch inkrementierende ganze Zahl ist, und die text Spalte ist eine 200-Zeichen VARCHAR.

Sagen, ich habe die folgenden Zeilen:

3 | I think I'll have duck tonight

4 | Maybe the chicken will be alright

5 | I have a pet duck now, awesome!

6 | I love duck

Dann wird die Liste Ich will mich zu könnte so etwas wie sein erzeugen:

  • 3 Vorkommen von 'Ente'
  • 3 Vorkommen von 'I'
  • 2 Vorkommen von 'haben'
  • 1 Vorkommen von 'Huhn'
  • Etc Etc

Plus, ich werde wahrscheinlich eine Liste von Teilstrings beibehalten möchten aus der Liste zu ignorieren, wie ‚I‘, ‚werden‘ und ‚haben. Es ist wichtig zu beachten Sie, dass ich nicht weiß, was die Leute schreiben wird.

Ich habe nicht eine Liste von Worten, die ich überwachen will, ich will nur die am häufigsten verwendeten Strings finden. Ich werde dann keine fehlerhafte Teil herauszufiltern, die manuell durch Bearbeiten der Abfrage nicht interessant aus der Liste sind.

Kann jemand empfehlen, den besten Weg, dies zu tun? Danke an alle!

War es hilfreich?

Lösung

MySQL tut dies bereits für Sie.

Zuerst sicherstellen, dass Ihre Tabelle eine MyISAM-Tabelle ist

Definieren Sie einen Volltextindex auf Ihrer Spalte

Auf einer Shell-Befehlszeile zu dem Ordner, in dem Sie Ihre MySQL-Daten gespeichert sind, geben Sie dann:

myisam_ftdump -c yourtablename 1 >wordfreq.dump

Sie können dann Prozess wordfreq.dump, um die unerwünschte Spalte zu beseitigen und sortiert nach Frequenz decending.

Sie können mit einer einzigen Befehlszeile alle oben tun und einige sed / awk keinen Zweifel Zauberei. Und man konnte es in Ihr Programm integrieren, ohne eine Abbilddatei zu benötigen.

Weitere Informationen über myisam_ftdump hier: http://dev.mysql.com/doc/refman/ 5.0 / de / myisam-ftdump.html

Oh ... eine weitere Sache, die Stoppwörter für MySQL in den Motor vorkompilierte. Und Worte mit 3 oder weniger Zeichen werden nicht indiziert. Die vollständige Liste ist hier:

http://dev.mysql.com/doc /refman/5.0/en/fulltext-stopwords.html

Wenn diese Liste nicht ausreichend für Ihre Bedürfnisse ist, oder Sie müssen Worte mit weniger als 3 Zeichen zu zählen, ist der einzige Weg, MySQL für FULLTEXT- mit unterschiedlichen Regeln neu zu kompilieren. Ich das nicht empfehlen!

Andere Tipps

Auszug

auf flache Datei und verwenden Sie dann Ihre Lieblings schnelle Sprache, Perl, Python, Ruby, etc die flache Datei zu verarbeiten.

Wenn Sie nicht über eine diese Sprachen als Teil Ihrer skillset haben, ist dies eine perfekte kleine Aufgabe ein zu beginnen, und es wird nicht lange dauern.

Einige Datenbank-Aufgaben sind nur so viel einfacher, außerhalb der Datenbank zu tun.

Sie können in die MySQL aussehen wollen? Volltext-Parser Plugins

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top