Jak počet slov v MongoDB

0

Otázka

Může někdo doporučit nějaký způsob, že mohu dělat tento kód Pythonu jako MongoDB dotaz?

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

Hledám pomoc napsat MongoDB dotaz, který může vytvořit podobný výstup jako Python kód je znázorněno zde.

Analyzuje text z jednoho pole a vrací nejčastější slova.

enter image description here

Věřím, MongoDB slovo cloud link zde má podobné řešení https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ Nicméně musím napsat kód v MongoDB shell.

Nebyl jsem si jistý, jak aplikovat následující Stackoverflow řešení v tomto odkazu nejčastější slovo v MongoDB kolekce

Díky předem za jakoukoli radu.

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

Nejlepší odpověď

1

Dotaz

  • dotazu předpokládá, že text je na tweet pole
  • zápas najít slova s "regex" (slovo obsahuje pouze alfanumerické znaky zde)
  • odpočinout si
  • skupina a počítat
  • $set oprava struktury (můžete použít projekt i jeho stejné)
  • seřadit podle počtu slov
  • limit na to, aby pouze 100 nejoblíbenější slova

Test kód zde

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

Ahoj Takis_ já opravdu oceňuji vaše řešení. Měl jsem pár problémů se snaží, aby jej spustit. První jsem dostal chybu ..... agregát není definována, tak jsem přidal sbírek jméno, než váš kód. db.Tweety.agregátní( Teď jsem si to chyby .... $regexFindAll potřebuje "vstupu" musí být typu string" měl jsem dříve nastavit tweet pole do textového indexu, ale nechal jsem indexu a já jsem ještě dostat chybu $regexFindAll potřebuje "vstupu" musí být typu string" Tak jsem si zkontroloval, jaký máte typ pole je: typeof db.Tweet.findone().tweet vrátí řetězec, Nějaké návrhy?
Christopher

nějaký dokument(y) nemá string tweet, to není problém, $match může udržet pouze dokumenty, které mají tweet jako řetězec. Aktualizoval jsem odpověď.
Takis _

To funguje perfektně Takis, jen jsem musel udělat jeden malý upravit, aby si to do práce v shellu a to byl prefix kód s db. a název sbírky Tweety.
Christopher

db.Tweety.aggregate( [{"$match": {"$expr": {"$eq": [{"$type": "$tweet"}, "string"]}}}, {"$set": {"odpovídá": {"$regexFindAll": {"input": "$tweet", "regex": "\\w+"}}}}, {"$projekt": {"tokeny": "$zápasů.zápas"}}, {"$odpočinout": {"path": "$tokeny"}}, {"$group": {"_id": "$tokeny", "count": {"$sum": 1}}}, {"$set": {"slovo": "$_id", "_id": "$$ODSTRANIT"}}, {"$sort": {"počet": -1}}, {"$limit": 100}])
Christopher

V jiných jazycích

Tato stránka je v jiných jazycích

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