0
0 Комментариев

есть база данных с комментариями. необходимо найти топ самых частых во всех комментариях. Все, что на данный момент удалось сделать- находить кол-во встреч конкретного слова, которое непосредственно в коде задается. Можно ли как-то реализовать такой поиск, при том универсальный для любого набора комментариев/текстов/еще чего-то на русском языке?

import pandas as pd
import sys
import pymysql
import numpy as np
import nltk
from nltk.corpus import state_union
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
 
#подключаюсь к базе данных, записываю комментарии в DataFrame
db = pymysql.connect(host='localhost', user='root', passwd='',
                      database='mom_db', charset='utf8')
df = pd.read_sql("SELECT comm2 FROM comments ", db)
 
 
#Функция убирает лишние символы по границе текста,точки , запятые и проч.
def delete_chars(str):
    str = str.lstrip()
    str = str.rstrip()
    str = str.replace("."," ")
    str = str.replace(","," ")
    str = str.replace("-"," ")
    str = str.replace("?"," ")
    str = str.replace("!"," ")
    str = str.replace(")"," ")
    str = str.replace("("," ")
    str = str.replace("..."," ")
    str = str.replace("—"," ")
    str = str.replace(":"," ")
    str = str.replace("<"," ")
    str = str.replace(">"," ")
    str = str.replace("/"," ")
    str = str.replace("``"," ")
    str = str.replace("'"," ")
    str = str.replace("«", " ")
    str = str.replace("»", " ")
    str = str.replace(";", " ")
    str = str.lower()
    return str
 
 
 
df['comm2'] = df['comm2'].apply(delete_chars)
 
st_w = set(stopwords.words('russian'))
words_filtered = []
i = 0
for df['comm2'][i] in df['comm2']:
    df_tok = word_tokenize(df['comm2'][i])
    i = i + 1
    for w in df_tok:
        if w not in st_w:
            words_filtered.append(w)
print(words_filtered)
 
count = words_filtered.count('Европе')
print(count)

P.S. может есть более оптимальное решение вместо функции delete_chars?

пример необходимого вывода:

"слово_1" 33
"слово_2" 22
"слово_3" 11


Добавить комментарий