tf-idf для текстового кластерного анализа

Я хотел бы сгруппировать небольшие тексты, включенные в столбец df['Texts'], из фрейма данных. Примеры предложений для анализа следующие:

    Texts

  1 Donald Trump, Donald Trump news, Trump bleach, Trump injected bleach, bleach coronavirus.
  2 Thank you Janey.......laughing so much at this........you have saved my sanity in these mad times. Only bleach Trump is using is on his heed ????
  3 His more uncharitable critics said Trump had suggested that Americans drink bleach. Trump responded that he was being sarcastic.
  4 Outcry after Trump suggests injecting disinfectant as treatment.
  5 Trump Suggested 'Injecting' Disinfectant to Cure Coronavirus?
  6 The study also showed that bleach and isopropyl alcohol killed the virus in saliva or respiratory fluids in a matter of minutes.

Поскольку я знаю, что TF-IDF полезен для кластеризации, я использовал следующие строки кода (следуя некоторым предыдущим вопросам сообщества):

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import re
import string

def preprocessing(line):
    line = line.lower()
    line = re.sub(r"[{}]".format(string.punctuation), " ", line)
    return line

tfidf_vectorizer = TfidfVectorizer(preprocessor=preprocessing)
tfidf = tfidf_vectorizer.fit_transform(all_text)

kmeans = KMeans(n_clusters=2).fit(tfidf) # the number of clusters could be manually changed

Однако, поскольку я рассматриваю столбец из фрейма данных, я не знаю, как применить вышеуказанную функцию. Не могли бы вы помочь мне с этим?


person still_learning    schedule 11.05.2020    source источник
comment
Ваш вопрос немного сбивает с толку, поскольку, насколько я могу судить, у вас уже есть правильный код. Вы пробовали tfidf = tfidf_vectorizer.fit_transform(df['Texts']), чтобы увидеть результаты?   -  person G. Anderson    schedule 11.05.2020
comment
большое спасибо @G.Anderson   -  person still_learning    schedule 11.05.2020


Ответы (1)


def preprocessing(line):
    line = line.lower()
    line = re.sub(r"[{}]".format(string.punctuation), " ", line)
    return line

tfidf_vectorizer = TfidfVectorizer(preprocessor=preprocessing)
tfidf = tfidf_vectorizer.fit_transform(df['Texts'])

kmeans = KMeans(n_clusters=2).fit(tfidf)

Вам просто нужно заменить all_text на ваш df. Было бы неплохо сначала построить конвейер, а затем одновременно применить векторизатор и Kmeans.

Кроме того, для получения более точного результата дополнительная предварительная обработка вашего текста никогда не будет плохой идеей. Кроме того, однако я не думаю, что понижение текста является хорошей идеей, поскольку вы, естественно, удаляете хорошую функцию для стиля письма (если мы считаем, что вы хотите найти автора или назначить автора в группу), но для получения настроения предложений, да лучше понизить.

person Ehsan    schedule 11.05.2020
comment
Большое спасибо Эхсан. Я получил этот вывод: KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300, n_clusters=2, n_init=10, n_jobs=None, precompute_distances='auto', random_state=None, tol=0.0001, verbose=0). Как я мог получить «полезную» и удобочитаемую информацию? Я не могу понять, что означает вывод. Я бы ожидал, что некоторые списки или какая-то информация будут более «визуальными». - person still_learning; 11.05.2020
comment
Ну на самом деле это тяжелая тема. Позвольте мне посмотреть, смогу ли я найти вам полезную ссылку с примером для понимания, а пока попробуйте выполнить кластеризацию для диапазона количества кластеров, затем постройте ее и найдите шаблон локтя. Эта точка будет наилучшим количеством кластеров, которое вы можете иметь. А для будущих данных вы можете предсказать класс вашего текста на основе лучшей модели kmeans, которая у вас есть. - person Ehsan; 11.05.2020
comment
Не могли бы вы поделиться информацией о том, как сделать кластеризацию из этого вывода? Я ожидал чего-то более графического, типа информации, которую я мог бы нарисовать, но в данном случае я думаю, что это было бы невозможно сделать. Кроме того, вы упомянули о прогнозировании класса: как я мог его предсказать? Не могли бы вы привести пример? Если вы считаете, что было бы лучше открыть новый вопрос, я сделаю это - person still_learning; 11.05.2020
comment
По этой ссылке вы можете найти подробный пример того, как использовать kmeans для кластеризации и техники локтя. github.com/JishaDSND/Udacity/blob/master/ - person Ehsan; 11.05.2020
comment
Большой! Большое спасибо @Ehsan! - person still_learning; 11.05.2020