Mongodb'de kelime sayımı nasıl yapılır

0

Soru

Herkes bu Python kodunu MongoDB sorgusu olarak yapabilmem için bir yol önerebilir mi?

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

Burada gösterilen Python koduyla benzer bir çıktı oluşturabilecek bir MongoDB sorgusu yazmak için yardım arıyorum.

Bir alanın tüm metnini analiz etmek ve en yaygın kelimeleri döndürmek.

enter image description here

Buradaki MongoDB kelime bulutu bağlantısının benzer bir çözüme sahip olduğuna inanıyorum https://docs.mongodb.com/charts/saas/chart-type-reference/word-cloud/ Ancak kodu MongoDB kabuğuna yazmam gerekiyor.

Aşağıdaki Stackoverflow çözümünü bu bağlantıda MongoDB koleksiyonundaki en sık kullanılan kelimeye nasıl uygulayacağımdan emin değildim

Herhangi bir tavsiye için şimdiden teşekkürler.

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

En iyi cevabı

1

Sorgu

  • sorgu, metnin tweet alanında olduğunu varsayar
  • regex ile kelimeleri bulmak için eşleştirin (word burada yalnızca alfasayısal karakterler içerir)
  • gevşemek
  • gruplandır ve say
  • $set yapıyı düzeltmek için (projeyi de aynı şekilde kullanabilirsiniz)
  • kelime sayısına göre sırala
  • sadece en popüler 100 kelimeyi saklamak için sınırlayın

Test kodu burada

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

Merhaba Takis_ Çözümünüzü gerçekten takdir ediyorum. Çalıştırmaya çalışırken bazı sorunlarım vardı. İlk hata var ..... toplama tanımlanmadı, bu yüzden koleksiyonların adını kodunuzdan önce ekledim. db.Cıvıldıyor.toplu (Şimdi bu hatayı alıyorum.... $regexfindall'ın 'girdi' tür dizesi olması gerekiyor " Daha önce tweet alanını bir metin dizinine ayarladım ancak dizini düşürdüm ve hala hatayı alıyorum $regexfindall'ın 'girdi' tür dizesi olması gerekiyor " Bu yüzden alanın ne tür olduğunu kontrol ettim: typeof db.Cıvıldamak.findone().tweet, dize döndürüyor Herhangi bir öneriniz var mı?
Christopher

bazı belgelerde dize tweet yok, bu bir sorun değil, $match yalnızca tweet içeren belgeleri dize olarak saklayabilir. Cevabı güncelledim.
Takis _

Bu mükemmel çalışıyor Takis, sadece kabukta çalışmasını sağlamak için küçük bir düzenleme yapmak zorunda kaldım ve bu kodu db ile öneklemekti. ve koleksiyonun adı Tweet atıyor.
Christopher

db.Cıvıldıyor.aggregate( [{"$match": {"$expr": {"$eq": [{"$type": "$tweet"}, "string"]}}}, {"$set": {"eşleşmeler": {"$regexFindAll": {"giriş": "$tweet", "regex": "\\w+"}}}}, {"$proje": {"belirteçler": "$ eşleşir.maç"}}, dinlenmek {"yol": "$belirteçleri"}} {"$": {"_ıd": "$belirteçleri", "count": {"$Toplam": 1}}} {"$grup":, {"$": {"kelime": "_ıd$", "_ıd": "$KALDIR"$}} kümesi, -1 {"count":} {"sıralama$": {"limit"$: 100}])
Christopher

Diğer dillerde

Bu sayfa diğer dillerde

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