【发布时间】:2018-02-15 11:34:36
【问题描述】:
我的数据集中有一列包含车祸描述。许多描述不一致,但意思相同。例如,如果我考虑标记为Descriptions 的变量的前 7 行(我的实际数据集是 17,000+ 行):
Descriptions
CLMT REAR ENDED IV
claimant REAR ENDED IV
CLM'R EAR ENDED IV
4 way stop sgn
CLM'T rear-ended IV
IV STOPPED AT RED LIGHT WAS REAR ENDED BY CLM'T
IV Stopped at red light when IV was R/E by OV
其中CLMT REAR ENDED IV 和claimant REAR ENDED IV 表示相同的意思,但它们的拼写略有不同。我想生成一个变量,将它们分组到同一类别中。最终目标是这样的:
Descriptions clusterGroup
CLMT REAR ENDED IV cluster1
claimant REAR ENDED IV cluster1
CLM'R EAR ENDED IV cluster1
4 way stop sgn cluster2
CLM'T rear-ended IV cluster1
IV STOPPED AT RED LIGHT WAS REAR ENDED BY CLM'T cluster3
IV Stopped at red light when IV was R/E by OV cluster3
我知道这是错误的,我不知道如何让每一行成为一个 nltk 句子,然后使用 scikit 学习 kmean 进行聚类:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import pandas as pd
import nltk
df = pd.read_csv('dataset.csv')
documents = df['Descriptions'].apply(nltk.sent_tokenize)
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)
true_k = 50
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)
predict=model.predict(X)
df['clusterGroup'] = Series(predict, index=X.index)
当我运行上面的脚本时,出现以下错误:
AttributeError: 'list' object has no attribute 'lower'
考虑到Descriptions pandas 列中的每一行都是一个句子,我怎么可能使用 nltk 将它们分解成可以运行 kmeans 或其他聚类算法的句子?任何帮助或指导将不胜感激
【问题讨论】:
-
您可以按照本教程进行操作:nlpforhackers.io/recipe-text-clustering
-
您是否只想按相似性对描述进行聚类,而不考虑主题,或者您是否拥有(或可以制作)应分配描述的特定类别列表?如果是第二个,请查看分类器。
-
我的最终目标是产生类似于他们在github.com/smilli/clust 中所做的事情,但理想情况下为每个集群添加标签。我并不是真的想把更多的东西分类成组
-
执行此任务的简单方法是使用 OpenRefine github.com/OpenRefine/OpenRefine/wiki/Clustering
标签: python-2.7 pandas scikit-learn nltk cluster-analysis