布吉附近公司做网站建设多少钱,wordpress从指定目录获取文章,wordpress支持伪静态,做健康食品的网站一.基于Word2vec词聚类的关键词步骤
基于Word2Vec的词聚类关键词提取包括以下步骤#xff1a;
1.准备文本数据#xff1a;收集或准备文本数据#xff0c;可以是单一文档或文档集合#xff0c;涵盖关键词提取的领域。2.文本预处理#xff1a;清洗文本数据#xff0c;去除…
一.基于Word2vec词聚类的关键词步骤
基于Word2Vec的词聚类关键词提取包括以下步骤
1.准备文本数据收集或准备文本数据可以是单一文档或文档集合涵盖关键词提取的领域。2.文本预处理清洗文本数据去除无关字符、标点符号将文本转换为小写等。进行分词将文本划分为词语。3.训练Word2Vec模型使用预处理后的文本数据训练Word2Vec模型。可以使用现有的库如gensim也可以自行实现Word2Vec模型的训练。定义模型的参数如词向量维度、窗口大小、最小词频等。4.获取词向量通过训练好的Word2Vec模型获取每个词语的词向量。5.词聚类使用聚类算法对词向量进行聚类将相似的词语分为同一簇。常用的聚类算法包括K-Means、DBSCAN等。定义聚类的数量簇数。6.获取每个聚类的代表词对每个聚类选择代表性的词语作为关键词。这可以通过计算每个聚类的中心或其他代表性指标来实现。7.输出关键词将每个聚类的代表词作为关键词输出得到最终的关键词列表。整个流程的核心在于使用Word2Vec模型得到词向量然后通过聚类算法将相似的词语归为一簇最终提取每个簇的代表性词语作为关键词。这种方法能够捕捉词语之间的语义关系提高关键词的表达力。
二.基于Word2vec词聚类的关键词的代码实现
词向量的预处理
# codingutf-8
import warnings
warnings.filterwarnings(actionignore, categoryUserWarning, modulegensim) # 忽略警告
import codecs
import pandas as pd
import numpy as np
import jieba # 分词
import jieba.posseg
import gensim # 加载词向量模型
# 返回特征词向量bai
def word_vecs(wordList, model):name []vecs []for word in wordList:word word.replace(\n, )try:if word in model: # 模型中存在该词的向量表示name.append(word.encode(utf8).decode(utf-8))vecs.append(model[word])except KeyError:continuea pd.DataFrame(name, columns[word])b pd.DataFrame(np.array(vecs, dtypefloat))return pd.concat([a, b], axis1)
# 数据预处理操作分词去停用词词性筛选
def data_prepare(text, stopkey):l []# 定义选取的词性pos [n, nz, v, vd, vn, l, a, d]seg jieba.posseg.cut(text) # 分词for i in seg:# 去重 去停用词 词性筛选if i.word not in l and i.word\not in stopkey and i.flag in pos:# print i.wordl.append(i.word)return l
# 根据数据获取候选关键词词向量
def build_words_vecs(data, stopkey, model):idList, titleList, abstractList data[id], data[title], data[abstract]for index in range(len(idList)):id idList[index]title titleList[index]abstract abstractList[index]l_ti data_prepare(title, stopkey) # 处理标题l_ab data_prepare(abstract, stopkey) # 处理摘要# 获取候选关键词的词向量words np.append(l_ti, l_ab) # 拼接数组元素words list(set(words)) # 数组元素去重,得到候选关键词列表wordvecs word_vecs(words, model) # 获取候选关键词的词向量表示# 词向量写入csv文件每个词400维data_vecs pd.DataFrame(wordvecs)data_vecs.to_csv(result/vecs/wordvecs_ str(id) .csv, indexFalse)print (document , id, well done.)
def main():# 读取数据集dataFile data/text.csvdata pd.read_csv(dataFile)# 停用词表stopkey [w.strip() for w in codecs.open(data/stopWord.txt, r, encodingutf-8).readlines()]# 词向量模型inp wiki.zh.text.vectormodel gensim.models.KeyedVectors.load_word2vec_format(inp, binaryFalse)build_words_vecs(data, stopkey, model)
if __name__ __main__:main()基于word2vec的关键词提取
# codingutf-8
import os
from sklearn.cluster import KMeans
import pandas as pd
import numpy as np
import math
# 对词向量采用K-means聚类抽取TopK关键词
def words_kmeans(data, topK):words data[word] # 词汇vecs data.iloc[:, 1:] # 向量表示kmeans KMeans(n_clusters1, random_state10).fit(vecs)labels kmeans.labels_ # 类别结果标签labels pd.DataFrame(labels, columns[label])new_df pd.concat([labels, vecs], axis1)vec_center kmeans.cluster_centers_ # 聚类中心# 计算距离相似性 采用欧几里得距离欧式距离distances []vec_words np.array(vecs) # 候选关键词向量dataFrame转arrayvec_center vec_center[0] # 第一个类别聚类中心,本例只有一个类别length len(vec_center) # 向量维度for index in range(len(vec_words)): # 候选关键词个数cur_wordvec vec_words[index] # 当前词语的词向量dis 0 # 向量距离for index2 in range(length):dis (vec_center[index2] - cur_wordvec[index2]) * \(vec_center[index2] - cur_wordvec[index2])dis math.sqrt(dis)distances.append(dis)distances pd.DataFrame(distances, columns[dis])# 拼接词语与其对应中心点的距离result pd.concat([words, labels, distances], axis1)# 按照距离大小进行升序排序result result.sort_values(bydis, ascendingTrue)# 抽取排名前topK个词语作为文本关键词wordlist np.array(result[word])# 抽取前topK个词汇word_split [wordlist[x] for x in range(0, topK)]word_split .join(word_split)return word_split
if __name__ __main__:# 读取数据集dataFile data/text.csvarticleData pd.read_csv(dataFile)ids, titles, keys [], [], []rootdir result/vecs # 词向量文件根目录fileList os.listdir(rootdir) # 列出文件夹下所有的目录与文件# 遍历文件for i in range(len(fileList)):filename fileList[i]path os.path.join(rootdir, filename)if os.path.isfile(path):# 读取词向量文件数据data pd.read_csv(path, encodingutf-8)# 聚类算法得到当前文件的关键词artile_keys words_kmeans(data, 5)# 根据文件名获得文章id以及标题(shortname, extension) os.path.splitext(filename)t shortname.split(_)article_id int(t[len(t) - 1]) # 获得文章id# 获得文章标题artile_tit articleData[articleData.id article_id][title]print(artile_tit)print(list(artile_tit))artile_tit list(artile_tit)[0] # series转成字符串ids.append(article_id)titles.append(artile_tit)keys.append(artile_keys.encode(utf-8).decode(utf-8))# 所有结果写入文件result pd.DataFrame({id: ids, title: titles, key: keys}, columns[id, title, key])result result.sort_values(byid, ascendingTrue) # 排序result.to_csv(result/word2vec.csv, indexFalse, encodingutf_8_sig)