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