Как подсчитать количество слов в MongoDB

0

Вопрос

Может ли кто-нибудь порекомендовать способ, которым я могу сделать этот код Python в качестве запроса MongoDB?

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

Я ищу помощь в написании запроса MongoDB, который может создать выходные данные, аналогичные показанному здесь коду Python.

Анализ всего текста одного поля и возврат наиболее распространенных слов.

enter image description here

Я считаю, что ссылка на облако слов MongoDB здесь имеет аналогичное решение https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ Однако мне нужно написать код в оболочке MongoDB.

Я не был уверен, как применить следующее решение Stackoverflow по этой ссылке Самое частое слово в коллекции MongoDB

Заранее спасибо за любые советы.

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

Лучший ответ

1

Запрос

  • запрос предполагает, что текст находится в поле твита
  • сопоставьте, чтобы найти слова с регулярным выражением (здесь слово содержит только буквенно-цифровые символы).
  • размотать
  • группировка и подсчет
  • $set чтобы исправить структуру (вы можете использовать проект также его же)
  • сортировка по количеству слов
  • ограничьтесь сохранением только 100 самых популярных слов

Тестовый код здесь

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

Привет, Такис, я действительно ценю твое решение. У меня было несколько проблем, когда я пытался запустить его. Сначала я получил ошибку ..... агрегат не определен, поэтому я добавил имя коллекции перед вашим кодом. db.Tweets.aggregate( Теперь я получаю эту ошибку .... $regexFindAll требует, чтобы" ввод" был строкового типа "Я ранее установил поле твита в текстовый индекс, но я сбросил индекс, и я все еще получаю ошибку $regexFindAll требует, чтобы "ввод" был строкового типа", Поэтому я проверил, какого типа поле: typeof db.Твитнуть.findone().в твиттере он возвращает строку С любыми предложениями?
Christopher

в некоторых документах(документах) нет строкового твита, это не проблема, $match может хранить только документы, в которых есть твит в виде строки. Я обновил ответ.
Takis _

Это отлично работает, Такис, мне просто нужно было внести одну небольшую правку, чтобы заставить ее работать в оболочке, и это была префиксная обработка кода с помощью бд. и Твиты с названием коллекции.
Christopher

дБ.Твиты.с Aggregate( [{"$матч": {"$expr мы": {"$EQ" по: [{"$типа": "$твит"}, "строка"]}}}, {"$набор": {"играм": {"$regexFindAll": {"вход": "$чирикать", "регулярное выражение": "\\ж+"}}}}, {"$проект": {"маркеры": "$играм.матч"}}, {"$раскручивать": {"путь": "$маркеры"}}, {"$группа": {"поля _id": "$токены", "граф": {"$сум": 1}}}, {"$набор": {"слово": "$параметр _id", "поля _id": "$$удалить"}}, {"$этакий": {"считать": -1}}, {"$предел": 100}])
Christopher

На других языках

Эта страница на других языках

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