Cómo hacer un recuento de palabras en MongoDB

0

Pregunta

¿Alguien puede recomendar una manera de que yo pueda hacer este código en Python como MongoDB consulta?

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

Estoy buscando ayuda para escribir una MongoDB consulta que puede crear una salida similar a como el código de Python muestra aquí.

El análisis de todo el texto de un campo y la devolución de las palabras más comunes.

enter image description here

Creo MongoDB nube de palabras de enlace de aquí tiene una solución similar https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ Sin embargo tengo que escribir el código en el shell de MongoDB.

Yo no estaba seguro de cómo se aplican las siguientes Stackoverflow solución en este enlace de la palabra Más frecuente en MongoDB colección

Gracias de antemano por cualquier consejo.

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

Mejor respuesta

1

Consulta

  • consulta supone que el texto es en tweet campo
  • partido para encontrar las palabras con las regex (word contiene sólo caracteres alfanuméricos aquí)
  • relajarse
  • grupo y contar
  • $set para fijar la estructura (puede utilizar el proyecto también trata de la misma)
  • ordenar por número de palabras
  • límite para mantener sólo los 100 más populares de palabras

El código de la prueba aquí

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

Hola Takis_ realmente aprecio su solución. Tuve un par de problemas tratando de ejecutarlo. Primero tengo el error ..... agregado no está definido, por lo que añadió el nombre de colecciones antes de su código. db.Tweets.agregado( Ahora me sale este error .... $regexFindAll necesidades 'de entrada' a ser de tipo cadena" yo tenía antes de establecer el tweet de campo a un índice de texto, pero he bajado el índice y yo todavía estoy recibiendo el error $regexFindAll necesidades 'de entrada' a ser de tipo cadena" por Lo que tengo comprobado cuál es el tipo de campo es: typeof db.Tweet.findone().tweet devuelve la cadena Alguna sugerencia?
Christopher

algunos de los documento(s) no tiene cadena tweet, esto no es un problema, $match puede mantener sólo los documentos que han tweet como cadena. He actualizado la respuesta.
Takis _

Que funciona a la perfección Takis, yo sólo tenía que hacer una pequeña modificación para que funcione en la shell y que fue el prefijo del código con db. y el nombre de la colección de Tweets.
Christopher

db.Tweets.agregado( [{"$match": {"$expr": {"$eq": [{"type": "$tweet"}, "cadena"]}}}, {"$set": {"partidos": {"$regexFindAll": {"entrada": "$tweet", "regex": "\\w+"}}}}, {"$proyecto": {"tokens": "$coincidencias.partido"}}, {"$relajarse": {"path": "$tokens"}}, {"$group": {"_id": "$tokens", "count": {"$suma": 1}}}, {"$set": {"palabra": "$_id", "_id": "$$REMOVE"}}, {"$sort": {"contar": -1}}, {"$"límite: 100}])
Christopher

En otros idiomas

Esta página está en otros idiomas

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