k-means聚类对评价内容进行归类

应用场景

有很多评价内容,对评价内容进行聚类,得到每个类别的关键词
可以用python的scikit-learn或者mahout,得到聚类结果,都只能作为参考,最终结果仍然用人工定义
聚类将已有的样本分类,构建tfidf词频矩阵,利用朴素贝叶斯分类器可以预测新的评价内容归属于哪一类,参考文章python 中文文本分类

python方案

1.准备足够多的的评论样本,最好1万+
2.对每个评价内容用jieba分词,这一步最重要,自建特定行业词库分词效果最好
3.scikit-learn的方法得到所有样本的tf-idf矩阵
4.拟定一个聚类簇K的范围,比如10-20循环执行,k-means聚类,Calinski-Harabasz Index评估的聚类分数,取得分最高的那一个作为聚类K,输出K类每个类下词频最高的前30个单词,人工对每个分类命名
5.优化的话:降维
参考主要代码:

import jieba.posseg as pseg
# 中文分词
def jieba_cut(comment, stop_words):
    textContent = (str(comment)).replace("\r\n", "").strip()  # 删除多余空行与空格
    word_list = []  # 建立空列表用于存储分词结果
    seg_list = pseg.cut(textContent)  # 精确模式分词[默认模式]
    for word in seg_list:
        if word.flag in ['ns', 'n', 'vn', 'v', 'nr'] and word.word not in stop_words:  # 选择属性
            word_list.append(word.word)  # 分词追加到列表
    return word_list

from sklearn.feature_extraction.text import TfidfVectorizer  # 基于TF-IDF的词频转向量库
from sklearn.cluster import KMeans
from sklearn import metrics
vectorizer = TfidfVectorizer(stop_words=stop_words,  use_idf=True)  # 创建词向量模型
X = vectorizer.fit_transform(comments)  # 将评论关键字列表转换为词向量空间模型
model_kmeans = KMeans(n_clusters=n)  # 创建K-Means聚类模型对象
model_kmeans.fit(X)  # 训练模型
metrics.calinski_harabaz_score(X, model_kmeans)   #聚类得分评估,越大越好

java的mahout方案

参考文章Mahout使用K-Means进行中文文本聚类
mahout的好处就是可以利用hadoop分布式计算

你可能感兴趣的:(java,python,算法)