如何从不同的文件中聚类不同的文本?

问题描述 投票:-1回答:1

我想将来自不同文件的文本聚类到他们的主题。我正在使用20个新闻组数据集。所以有不同的类别,我想用DBSCAN将文本聚类到这些类别。我的问题是如何做到这一点?

目前,我将字典中的文件的每个文本保存为字符串。然后,我删除了几个字符和单词,并从每个字典条目中提取名词。然后,我想在每个dict条目上应用Tf-idf,但是如何将其传递给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,我认为将所有文本放在一个字符串中是错误的,因为那时没有办法为它分配标签,我是对的吗?

我希望我的解释不会太混乱。

最好的祝福!

编辑:

 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))
python scikit-learn dbscan tfidfvectorizer
1个回答
0
投票

您应该将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将包含您应该运行聚类算法的向量。

© www.soinside.com 2019 - 2024. All rights reserved.