我想将来自不同文件的文本聚类到他们的主题。我正在使用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))
您应该将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
将包含您应该运行聚类算法的向量。