Comment créer une liste ordonnée des sous-chaînes les plus courantes dans ma colonne MySQL varchar?

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

  •  05-07-2019
  •  | 
  •  

Question

J'ai une table de base de données MySQL avec quelques milliers de lignes. La table est configurée comme suit:

id | texte

La colonne id est un entier auto-incrémenté et la colonne text est un varchar de 200 caractères.

Disons que j'ai les lignes suivantes:

3 | Je pense que je vais avoir canard ce soir

4 | Peut-être que le poulet ira bien

5 | J'ai un canard de compagnie maintenant, génial!

6 | J'adore le canard

Ensuite, la liste que je souhaite générer peut ressembler à:

  • 3 occurrences de 'canard'
  • 3 occurrences de 'I'
  • 2 occurrences de 'have'
  • 1 occurrences de 'poulet'
  • .etc .etc

De plus, je souhaiterai probablement conserver une liste de sous-chaînes à ignorer dans la liste, comme "I", "Will" et "Have". Il est important de noter que je ne sais pas ce que les gens publieront.

Je n'ai pas de liste de mots à surveiller, je souhaite simplement rechercher les sous-chaînes les plus courantes. Je filtrerai ensuite manuellement les sous-chaînes erronées qui ne sont pas intéressantes dans la liste en modifiant la requête.

Quelqu'un peut-il suggérer la meilleure façon de procéder? Merci à tous!

Était-ce utile?

La solution

MySQL le fait déjà pour vous.

Assurez-vous d'abord que votre table est une table MyISAM

Définissez un index FULLTEXT sur votre colonne

Sur une ligne de commande shell, accédez au dossier dans lequel vos données MySQL sont stockées, puis tapez:

myisam_ftdump -c yourtablename 1 >wordfreq.dump

Vous pouvez ensuite traiter wordfreq.dump pour éliminer la colonne non désirée et trier par fréquence décroissante.

Vous pouvez faire tout ce qui précède avec une seule ligne de commande et sans aucun doute un peu de magie sed / awk. Et vous pouvez l'intégrer à votre programme sans avoir besoin d'un fichier de vidage.

Plus d'informations sur myisam_ftdump ici: http://dev.mysql.com/doc/refman/ 5.0 / fr / myisam-ftdump.html

Oh ... encore une chose, les mots vides de MySQL sont précompilés dans le moteur. Et les mots avec 3 caractères ou moins ne sont pas indexés. La liste complète est ici:

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

Si cette liste ne répond pas à vos besoins, ou si vous avez besoin de mots de moins de 3 caractères, le seul moyen est de recompiler MySQL avec des règles différentes pour FULLTEXT. Je ne recommande pas ça!

Autres conseils

Extrayez dans un fichier plat, puis utilisez votre langage rapide favori, perl, python, ruby, etc. pour traiter le fichier plat.

Si vous ne possédez pas l'une de ces langues dans le cadre de vos compétences, cette tâche est parfaite pour commencer à l'utiliser, et cela ne vous prendra pas longtemps.

Certaines tâches de base de données sont tellement plus faciles à effectuer en dehors de la base de données.

Vous voudrez peut-être consulter MySQL Plugins d'analyse de texte intégral

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top