Jak policzyć liczbę słów w MongoDB

0

Pytanie

Czy może ktoś polecić sposób, w jaki mogę zrobić ten kod Pythona jako kwerendy bazy danych MongoDB?

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

Szukam pomocy w napisaniu wniosku MongoDB, który może utworzyć dane wyjściowe podobne do pokazanego tutaj kodu Pythona.

Analiza tekstu z jednego pola i zwroty najbardziej popularnych słów.

enter image description here

Uważam, że link do chmury słów MongoDB tutaj ma podobne rozwiązanie https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ Jednak muszę napisać kod w powłoce MongoDB.

Nie byłem pewien, jak zastosować następne rozwiązanie Stackoverflow pod tym linkiem te pliki najczęściej mają słowo w kolekcji MongoDB

Z góry dziękuję za wszelkie porady.

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

Najlepsza odpowiedź

1

Zapytanie

  • wniosek zakłada, że tekst znajduje się w polu tweeta
  • dopasuj, aby znaleźć słowa z wyrażeniem regularnym (tu słowo zawiera tylko znaki alfanumeryczne).
  • unwind
  • grupowanie i zliczanie
  • $set aby naprawić strukturę (można użyć projekt także jego samego)
  • sortowanie po ilości słów
  • ograniczać sobie, pozostawiając tylko 100 najbardziej popularnych słów

Testowy kod tutaj

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

Witam, Takis, naprawdę doceniam twoją decyzję. Miałem kilka problemów, gdy próbowałem go uruchomić. Najpierw dostałem błąd ..... urządzenie nie jest zdefiniowana, dlatego dodałem nazwę kolekcji przed kodem. db.Tweets.aggregate( Teraz mam ten błąd .... $regexFindAll wymaga, aby" enter" został ciąg typu "Ja wcześniej ustanowił polu tweet tekstowy wskaźnik, ale wrzuciłem indeks, a ja nadal pojawia się błąd: $regexFindAll wymaga, aby "enter" został ciąg rodzaju", Więc sprawdziłem, co do rodzaju pole: typeof db.Tweet.findone().na twitterze on zwraca ciąg znaków Z wszelkich sugestii?
Christopher

w niektórych dokumentach(dokumentach) nie ma ciąg tweeta, to nie problem, $match może przechowywać tylko dokumenty, w których jest wpis w postaci wiersza. Zaktualizowałem odpowiedź.
Takis _

Działa to dobrze, Takis, że po prostu trzeba było wprowadzić jedną małą zmianę, aby zmusić go do pracy w powłoce, i to była префиксная przetwarzanie kodu za pomocą bazy danych. i Tweety z nazwą kolekcji.
Christopher

db.Tweety.z Aggregate( [{"$mecz": {"$expr my": {"$EQ" na: [{"$typ": "$tweet"}, "wiersz"]}}}, {"$zestaw": {"gier": {"$regexFindAll": {"wejście": "$tweet", "wyrażenie regularne": "\\g+"}}}}, {"$projekt": {"cookies": "$gier.mecz"}}, {"$rozkręcić": {"droga": "$znaczniki"}}, {"$grupa": {"pola _id": "$tokenów", "hrabia": {"$uzbecki": 1}}}, {"$zestaw": {"słowo": "$parametr _id", "pola _id": "$$usunąć"}}, {"$takiż": {"liczyć": -1}}, {"$limit": 100}])
Christopher

W innych językach

Ta strona jest w innych językach

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