Como fazer uma contagem de palavras no MongoDB

0

Pergunta

Alguém pode recomendar uma maneira que eu possa fazer isso em Python de código como um MongoDB consulta?

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

Estou procurando ajuda para escrever um MongoDB consulta que pode criar uma saída semelhante como o Python de código mostrado aqui.

Analisando o texto de um campo e retornar as palavras mais comuns.

enter image description here

Eu acredito que o MongoDB word cloud link aqui tem uma solução semelhante https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ No entanto eu tenho que escrever o código no MongoDB shell.

Eu não tinha certeza de como aplicar a seguinte Stackoverflow solução neste link Mais frequentes palavra no MongoDB coleção

Obrigado antecipadamente por qualquer conselho.

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

Melhor resposta

1

Consulta

  • consulta pressupõe que o texto no campo tweet
  • correspondência para encontrar as palavras com regex (word contém somente caracteres alfanuméricos aqui)
  • descontraia
  • grupo e contagem
  • $set para corrigir estrutura (você pode usar o project também é a mesma)
  • ordenação por contagem de palavra
  • limitar a manter apenas a 100 palavras mais populares

Código de teste aqui

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

Oi Takis_ eu realmente aprecio a sua solução. Tive alguns problemas de tentar executá-la. Primeiro eu tenho o erro ..... agregado não está definido, então eu adicionei as colecções nome antes de seu código. db.Tweets.agregação( Agora recebo este erro .... $regexFindAll necessidades 'de entrada' para ser do tipo string" eu tinha anteriormente definido o tweet de campo de um índice de texto, mas eu abandonei o índice e eu ainda estou recebendo o erro $regexFindAll necessidades 'de entrada' para ser do tipo string" Então, eu tenho verificado que o tipo de campo é: typeof db.Tweet.findone().tweet ela retorna string Alguma sugestão?
Christopher

de algum documento(s) não tem cadeia tweet, isso não é um problema, $match pode manter apenas os documentos que têm tweet como string. Eu atualizei a resposta.
Takis _

Que funciona perfeitamente Takis, eu só tinha que fazer uma pequena edição para começar a trabalhar na shell e que era o prefixo do código com o banco de dados. e o nome da coleção de Tweets.
Christopher

db.Tweets.agregação( [{"$match": {"$expr": {"$eq": [{"$type": "$tweet"}, "cadeia de caracteres"]}}}, {"$set": {"corresponde a": {"$regexFindAll": {"entrada": "$tweet", "regex": "\\w+"}}}}, {"$projeto": {"tokens": "$partidas.match"}}, {"$relaxar": {"caminho": "$tokens"}}, {"$grupo": {"_id": "$tokens", "count": {"$soma": 1}}}, {"$definir": {"palavra": "$_id", "_id": "$$RETIRE"}}, {"$sort": {"count": -1}}, {"$limite": 100}])
Christopher

Em outros idiomas

Esta página está em outros idiomas

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