【发布时间】:2019-07-23 00:10:50
【问题描述】:
编辑:我接受我的问题因相似而被关闭,但我认为答案为其他人提供了宝贵的知识,因此应该开放。
我一直在玩下面的脚本:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score
import textract
import os
folder_to_scan = '/media/sf_Documents/clustering'
dict_of_docs = {}
# Gets all the files to scan with textract
for root, sub, files in os.walk(folder_to_scan):
for file in files:
full_path = os.path.join(root, file)
print(f'Processing {file}')
try:
text = textract.process(full_path)
dict_of_docs[file] = text
except Exception as e:
print(e)
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(dict_of_docs.values())
true_k = 3
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)
print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
print("Cluster %d:" % i,)
for ind in order_centroids[i, :10]:
print(' %s' % terms[ind],)
它会扫描一个包含已扫描文档的图像文件夹,提取文本然后对文本进行聚类。我知道有 3 种不同类型的文档,所以我将 true_k 设置为 3。但是如果我有一个未知文档文件夹,其中可能有 1 到 100 种不同类型的文档。
【问题讨论】:
标签: python machine-learning scikit-learn cluster-analysis