Как кластеризовать разные тексты из разных файлов? - PullRequest
0 голосов
/ 15 апреля 2019

Я хотел бы кластеризовать тексты из разных файлов по темам. Я использую набор данных из 20 групп новостей. Таким образом, существуют разные категории, и я хотел бы объединить тексты в эти категории с помощью DBSCAN. Моя проблема в том, как это сделать?

В настоящий момент я сохраняю каждый текст файла в формате dict в виде строки. Затем я удаляю несколько символов и слов и извлекаю существительные из каждой записи. Затем я хотел бы применить Tf-idf к каждой записи dict, которая работает, но как я могу передать это в DBSCAN для кластеризации по категориям?

моя обработка текста и обработка данных:

counter = 0
dic = {}
for i in range(len(categories)):
            path = Path('dataset/20news/%s/' % categories[i])
            print("Getting files from: %s" %path)
            files = os.listdir(path)
            for f in files:
                with open(path/f, 'r',encoding = "latin1") as file:
                    data = file.read()
                    dic[counter] = data
                    counter += 1
if preprocess == True:
        print("processing Data...")
        content = preprocessText(data)
if get_nouns == True:
        content = nounExtractor(content)
tfidf_vectorizer = TfidfVectorizer(stop_words=stop_words, max_features=max_features)
for i in range(len(content)):
        content[i] = tfidf_vectorizer.fit_transform(content[i])

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

Надеюсь, мое объяснение не слишком запутанное.

С наилучшими пожеланиями!

EDIT:

 for f in files:
                with open(path/f, 'r',encoding = "latin1") as file:
                    data = file.read()
                    all_text.append(data)
tfidf_vectorizer = TfidfVectorizer(stop_words=stop_words, max_features=max_features)
    tfidf_vectorizer.fit(all_text)
    text_vectors = [] 
    for text in all_text: 
        text_vectors.append(tfidf_vectorizer.transform(text))

1 Ответ

0 голосов
/ 15 апреля 2019

Вы должны подогнать векторизатор TFIDF ко всему корпусу обучающего текста, а затем создать векторное представление для каждого текста / документа самостоятельно, преобразовав его с помощью TFIDF, затем следует применить кластеризацию к этим векторным представлениям для документов.

РЕДАКТИРОВАТЬ

Просто отредактируйте исходный код вместо следующего цикла

for i in range(len(content)):
        content[i] = tfidf_vectorizer.fit_transform(content[i])

Вы могли бы сделать это

transformed_contents = tfidf_vectorizer.fit_transform(content)

transformed_contents будет содержать векторы, с которыми вы должны запустить алгоритм кластеризации.

...