Я хотел бы кластеризовать тексты из разных файлов по темам. Я использую набор данных из 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))