Come fare un conteggio delle parole in MongoDB

0

Domanda

Qualcuno può consigliare un modo che io possa fare questo codice Python come MongoDB query?

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

Sto cercando aiuto per scrivere un MongoDB query che è possibile creare un output simile come il codice Python mostrato qui.

Analizzare il testo di un campo e di ritorno le parole più comuni.

enter image description here

Credo MongoDB word cloud link qui ha una soluzione simile https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ Tuttavia devo scrivere il codice in MongoDB shell.

Non ero sicuro di come applicare la seguente Stackoverflow soluzione in questo link Più frequenti parola nella collezione di MongoDB

Grazie in anticipo per qualsiasi consiglio.

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

Migliore risposta

1

Query

  • query si assume che il testo sia sul campo tweet
  • match a trovare le parole con le regex (word contiene solo caratteri alfanumerici qui)
  • rilassarsi
  • gruppo e conte
  • $set per risolvere struttura (è possibile utilizzare il progetto, inoltre, è la stessa)
  • ordina per conteggio di parola
  • limite per mantenere solo i 100 più popolari parole

Codice di Test qui

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

Ciao Takis_ apprezzo molto la tua soluzione. Ho avuto un paio di problemi cercando di eseguirlo. Prima ho avuto l'errore ..... aggregato non è definito, quindi ho aggiunto le collezioni di nome, prima del codice. db.Tweet.di aggregazione( Ora ottengo questo errore .... $regexFindAll ha bisogno di 'input' essere di tipo string" che avevo in precedenza impostare il tweet campo un indice di testo, ma ho lasciato cadere l'indice e sto ancora ricevendo l'errore $regexFindAll ha bisogno di 'input' essere di tipo string" Così ho controllato che tipo di campo è typeof db.Tweet.findone().tweet restituisce la stringa di Qualche suggerimento?
Christopher

qualche documento(s) non ha stringa tweet, questo non è un problema, $match può mantenere solo i documenti che hanno tweet come stringa. Ho aggiornato la risposta.
Takis _

Che funziona perfettamente Takis, ho dovuto fare una piccola modifica per farlo funzionare in the shell, e che era prefisso il codice con il db. e il nome della raccolta di Tweet.
Christopher

db.Tweet.di aggregazione( [{"$match": {"$expr": {"$eq": [{"$type": "$tweet"}, "stringa"]}}}, {"$set": {"corrisponde a": {"$regexFindAll": {"input": "$tweet", "regex": "\\w+"}}}}, {"$progetto": {"gettoni": "$partite.match"}}, {"$rilassarsi": {"percorso": "$token"}}, {"$gruppo": {"_id": "$token", "count": {"$somma": 1}}}, {"$impostare": {"parola": "$_id", "_id": "$$RIMUOVERE"}}, {"$sort": {"count": -1}}, {"$limit": 100}])
Christopher

In altre lingue

Questa pagina è in altre lingue

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