如何将来自不同文件的不同文本聚类?

时间:2019-04-15 10:21:46

标签: python scikit-learn dbscan tfidfvectorizer

我想将来自不同文件的文本聚类到其主题。我正在使用20个新闻组数据集。因此,存在不同的类别,我想使用DBSCAN将文本聚类到这些类别。我的问题是该怎么做?

此刻,我将文件中的每个文本保存为字典中的字符串。然后,我要删除几个字符和单词,并从每个字典条目中提取名词。然后,我想在每个有效的字典条目上应用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))

1 个答案:

答案 0 :(得分: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将包含您应针对其运行聚类算法的向量。