Comment faire un nombre de mots dans MongoDB

0

La question

Quelqu'un peut-il recommander une manière que je peux faire ce code Python comme MongoDB requête?

import pandas as pd 
data = pd.read_csv("elonmusk.csv") 
from collections import Counter
Counter(" ".join(data["tweet"]).split()).most_common(100)

Je suis à la recherche de l'aide pour écrire une MongoDB requête qui peut créer un niveau de production similaire que le code Python montré ici.

L'analyse de l'ensemble du texte d'un champ et de retourner les mots les plus communs.

enter image description here

Je crois que MongoDB nuage de mots lien ici a une solution similaire https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ Cependant, je dois écrire le code dans la MongoDB shell.

Je n'étais pas sûr de la façon d'appliquer la suivante Stackoverflow solution dans ce lien Plus fréquentes de la parole dans la collection MongoDB

Merci d'avance pour tous les conseils.

mongodb
2021-11-24 00:08:23
1

La meilleure réponse

1

Requête

  • requête suppose que le texte est sur le tweet de terrain
  • match à trouver les mots avec les regex (word contient uniquement des caractères alphanumériques ici)
  • détendez-vous
  • groupe et le comte
  • $set pour fixer la structure (vous pouvez utiliser le projet de aussi sa le même)
  • trier par nombre de mots
  • limite pour ne garder que les 100 plus populaires de mots

Le code de Test ici

aggregate(
[{"$match": {"$expr": {"$eq": [{"$type": "$tweet"}, "string"]}}},
 {"$set": 
    {"matches": {"$regexFindAll": {"input": "$tweet", "regex": "\\w+"}}}},
 {"$project": {"tokens": "$matches.match"}},
 {"$unwind": {"path": "$tokens"}},
 {"$group": {"_id": "$tokens", "count": {"$sum": 1}}},
 {"$set": {"word": "$_id", "_id": "$$REMOVE"}},
 {"$sort": {"count": -1}},
 {"$limit": 100}])
2021-12-12 14:34:04

Salut Takis_ j'apprécie vraiment votre solution. J'ai eu quelques problèmes d'essayer de l'exécuter. J'ai d'abord obtenu l'erreur ..... total n'est pas définie, donc j'ai ajouté les collections de nom avant de votre code. db.Les Tweets.agrégation( Maintenant j'ai cette erreur .... $regexFindAll besoins "entrée" pour être de type chaîne de caractères" j'avais déjà mis le tweet champ à un index de texte, mais j'ai abandonné l'index et j'ai toujours l'erreur $regexFindAll besoins "entrée" pour être de type chaîne de caractères" Donc, j'ai vérifié ce type de champ est: typeof db.Tweet.findone().tweet il retourne la chaîne de Toutes les suggestions?
Christopher

certains de document(s) ne possède pas de chaîne tweet, ce n'est pas un problème, $match pouvez ne garder que les documents qui ont tweet comme une chaîne de caractères. J'ai mis à jour la réponse.
Takis _

Qui fonctionne parfaitement Takis, j'ai juste eu à faire une petite modification pour le faire fonctionner dans la coquille et qui a été le préfixe de code avec la db. et le nom de la collection de Tweets.
Christopher

db.Les Tweets.agrégation( [{"$match": {"$expr": {"$eq": [{"$type": "$tweet"}, "chaîne de caractères"]}}}, {"$set": {"correspondances": {"$regexFindAll": {"entrée": "$tweet", "regex": "\\w+"}}}}, {"$projet": {"jetons": "$matches.match"}}, {"$détendre": {"path": "$tokens"}}, {"$groupe": {"_id": "$tokens", "count": {"$somme": 1}}}, {"$set": {"mot": "$_id", "_id": "$$REMOVE"}}, {"$tri": {"titre": -1}}, {"$limite": 100}])
Christopher

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................