在使用tf-idf和k-means进行文本聚类时,如何添加bigram停用词

时间:2019-12-10 18:13:22

标签: python scikit-learn tf-idf

摘要: 我正在使用tf-idf和k-means聚类进行文本聚类。我遵循了this article的做法。尽管我还没有完全了解集群方面的情况,但该概念目前仍适用于我的目的。

对我来说,主要目的是对每个文档进行聚类和标记,并在不阅读文档的情况下了解文档的含义。

代码:我正在使用下面的代码来完成代码,类似于本文。

vectorizer = TfidfVectorizer(
    stop_words=stopwords,
    max_df=0.8,
    min_df=2,
    ngram_range=(2, 2),
)

x = vectorizer.fit_transform([doc["text"] for doc in data])

n_clusters = len(data)
model = KMeans(
    n_clusters=n_clusters, init="k-means++", max_iter=500, n_init=10
)
preds = model.fit_predict(x)

order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i, pred in enumerate(preds):
    ind = order_centroids[pred, :1]
    print("Doc", i, "is related to:", terms[ind[0]])

简单输出:

Doc 0 is related to: flight ban
Doc 1 is related to: durable ergonomic
Doc 2 is related to: every element
Doc 3 is related to: zvartnots airport
Doc 4 is related to: zvartnots airport
Doc 5 is related to: line light
Doc 6 is related to: global interactive
Doc 7 is related to: fact mr
...

问题:我仅生成二元组(ngram_range=(2, 2))。问题是,尽管有些二元组是我的停用词,但它们的单字组却不是。例如。 “供水” 对我的情况可能没有意义,我想忽略它。但是“ water”和“ supply”一词可能对矢量化程序很有帮助,因此我不能单独将它们添加为停用词。我该如何忽略/添加一些双字母组作为停用词,使它们不再成为主题?

可选问题:您可能已经猜到,通过这种方法和现实生活中的数据,我发现了许多毫无意义的主题。我该如何“打分”这些主题,以便我只能挑选那些得分较高的主题?换句话说,如何过滤结果,以选择出真正适合集群的主题,例如“是的,此文档绝对属于该集群”?

建议。您只需使用文章中的文档即可生成最少的可复制示例。

编辑1:我尝试先拟合矢量化器,然后将一些双字停用词添加到矢量化器的停用词属性(vectorizer.stopwords_,而不是vectorizer.stopwords),然后尝试转换文档但是那没有用;我仍然看到作为主题添加的停用词。

0 个答案:

没有答案