基于 Jieba 和 Word2vec 的关键词词库构建

这篇具有很好参考价值的文章主要介绍了基于 Jieba 和 Word2vec 的关键词词库构建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近有空,把论文中用到的技术和大家分享一下(以组件化的形式),本文是第一篇,将讲述如何从大量的语料中获取诸多关键词和构建关键词词库或 xx 关键词词库(细分领域)。举例以购物网站的在线评论作为语料库,对其进行分词等操作,最终构建关键词词库(以物流关键词词库为例)和顺便绘制词云图。关键词词库构建完成后,可以做的事情就多了,往后包括权值计算和情感分析,这些都是将关键词作为基础单位的,往前对接 xx 评价指标体系(这些是题外话,可以忽略)。

目录

1 Jieba 分词及词频统计

1.1 自定义词典

1.2 停用词典

1.3 词频统计—初步构建词库

① 语料

② 处理 excel 语料数据

③ 分词及词频统计

④ 初步构建物流关键词词库

2 word2vec 拓展关键词词库

2.1 训练 word2vec 模型

2.2 使用模型—最终构建词库

2.3 Wordcloud 词云图


代码地址:https://gitee.com/yinyuu/nlp_yinyu

1 Jieba 分词及词频统计

jieba 是一种中文分词工具,它可以将中文文本进行分词,将文本中的词语分开,并标注它们的词性。可以通过以下命令进行安装:

pip install jieba

1.1 自定义词典

jieba 进行分词时,绝大部分的词汇都能识别出来,但是对于一些特有名词的识别就比较困难了,比如京东、淘宝、拼多多等等,这些特有词汇与在线评论的语料紧密关联,但是作为特有名词一般不会被记录在 jieba 模型中。

因此需求构建自定义词典,来处理语料中可能出现的特有名词,进而避免过度切分(比如将拼多多切分为多多)。

同时,自定义词典也承担着指导关键词词库的作用,针对购物网站的在线评论,比如构建物流关键词词库,那么就需要补充物流相关特有名词加入自定义词典;比如构建包装关键词词库,那么就需要包装相关特有名词......

📌 词库网站

这里推荐搜狗输入法的词库网站,涵盖了蛮多领域,词库的选择取决于你研究的对象和语料基础。

https://pinyin.sogou.com/dict/cate/index/96

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

📌 处理 scel 格式文件

下载完某词库后,它是 scel 格式文件,这不符合 jieba 自定义词典的加载格式,因此需要进行处理。

比如物流词汇大全【官方推荐】.scel,大家可以下载深蓝词库工具将其转化为 text 文本(随后可将后缀改为 txt 即可),或者以下在线处理网站:https://www.toolnb.com/tools/scelto.html,这样就更方便了。

处理完后如下:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

1.2 停用词典

分词时,其实并没有将数字、符号、虚词等不相关内容做区分,这些词就是停用词,因为这些词对于后面的研究来说意义不大,而且还可能影响文本分析的效率和准确性,因此需要使用停用词典。

之前我整合了百度停用词表+哈工大停用词表+机器智能实验室停用词库等词表,可在项目中自取~

1.3 词频统计—初步构建词库

① 语料

接下来使用 jieba 进行一次简单的词频统计,语料是我之前爬取的京东网站上的 5000 条评论数据,可在文章顶部下载查看,截图如下:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

② 处理 excel 语料数据

大家可以看到,目前语料数据还是 excel 格式,这是不满足 jieba 分词的要求的,因此需要对其做进一步的处理,代码如下:

import xlrd

'''
工具类
'''
class BaseHandle(object):

    def read_col_merge_file(self, url):
        '''读取合并列表comments列的值输出为txt'''
        excel = xlrd.open_workbook(url)  # 打开excel文件
        table = excel.sheet_by_index(0)  # 根据下标获取工作薄,这里获取第一个
        comments_list = table.col_values(1, start_rowx=1)  # 获取第一列的内容
        comments_str = '\n'.join(comments_list)  # 将数组转换成字符串,空行连接,模仿text文本
        return comments_str

    def get_file_abspath(self, filename):
        '''获取文件的根本路径,文件一般在\nlp_yinyu\下'''
        # 拼接路径
        path = os.path.join(os.path.dirname(os.getcwd()), filename)
        # 返回根本路径
        return os.path.abspath(path)


if __name__ == '__main__':
    base = BaseHandle()
    comments_str = base.read_col_merge_file('语料库_京东_5000条评论.xlsx')
    print(comments_str)

注意 xlrd 库的版本,需要小于等于 1.2.0,不然无法解析 xlsx 格式文件。同时由于我把文件放在了同目录下,因此 filename 直接使用文件名,不然建议使用绝对路径。

该方法使用后效果如下:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

③ 分词及词频统计

因为本文以构建物流关键词词库为例,因此引入物流词汇自定义词典,主要分为以下三步:

  1. 引入语料 excel 数据
  2. jieba 分词
  3. 对分词结果进行统计,最后生成【高频词统计.xlsx】文件

注意,需要安装 openpyxl 这个库,那么 DataFrame 才能生成 excel 文件。

代码如下:

import jieba
import pandas as pd
from base_handle import BaseHandle # 引入工具类

baseHandle = BaseHandle() #实例化

'''
1.1 Jieba 分词及词频统计
'''

def split_words_jieba(text):
    '''jieba分词操作'''
    diy_dict = (baseHandle.get_file_abspath('物流词汇大全.txt'))  # 引入自定义词典
    jieba.load_userdict(diy_dict)  # 加载自定义字典
    comment_cut = jieba.lcut(text)  # 分词结果
    # print(comment_cut)

    # 引入停用词表,当文本文件中带有英文双引号时,直接用pd.read_csv进行读取会导致行数减少,因此使用quoting=3
    stop_dic = (baseHandle.get_file_abspath('百度+哈工大+机器智能实验室停用词库.txt'))
    stopwords = pd.read_csv(stop_dic, names=['w'], header=None, sep='\t', encoding='utf-8', quoting=3)
    datas = []  # 去除停用词提取名词
    for word in comment_cut:
        if word not in list(stopwords.w) and len(word) > 1:
            datas.append(word)
    # print("分词+停用词成功\n"+str(data))
    return datas


def count_fre_words(datas):
    '''高频词统计'''
    counts = {}  # 新建1个字典
    for data in datas:
        counts[data] = counts.get(data, 0) + 1
    # 将字典列表化,并按频次排序
    items = list(counts.items())
    items.sort(key=lambda x: x[1], reverse=True)
    dt = pd.DataFrame(items, columns=['keyword', 'fre'])  # list 转换为 df
    # print(dt)
    dt1 = dt[(dt.fre != 1)]  # 删去频次为1的关键词
    dt1.to_excel('高频词统计.xlsx')  # 储存为表格


if __name__ == "__main__":
    # 1.引入语料excel数据
    text = baseHandle.read_col_merge_file(baseHandle.get_file_abspath('语料库_京东_5000条评论.xlsx'))
    # 2.jieba分词
    datas = split_words_jieba(text)
    # 3.对分词结果进行统计,最后生成【高频词统计.xlsx】文件
    count_fre_words(datas)

部分分词结果如下,可以看到语料数据被切分成一个个词汇

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

最终输出【高频词统计.xlsx】文件如下:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

④ 初步构建物流关键词词库

此时,物流关键词词库已经初具模型了,基于这个高频词统计结果,我们可以将其中联系到物流的关键词筛选出来,作为物流关键词的初步词库

因为自定义词典已经是【物流词汇大全.txt】了,因此绝大部分物流词汇都将包含在内,这些关键词排名越靠前,那么他在语料中的频次或者说重要性越大。一般来说,取排名靠前的关键词即可,排名越靠后,那么该关键词的影响作用也就越小,对于后边的统计研究意义也不大。

举例来说,我在此取 20 个物流关键词,将其放入工具类中:

class BaseHandle(object):

    def __init__(self):
        # 物流关键词词库:初步20个
        self.logistics_list = ['京东', '新鲜', '包装', '物流', '很快', '快递', '收到','速度', '送货', '推荐',
                               '小哥', '服务', '发货', '配送', '送到', '到货', '第二天', '冷链', '完好', '送货上门']

接下来就是通过 Word2vec 对物流关键词词库进行拓展。

2 word2vec 拓展关键词词库

简单来说,上边的流程已经满足构建基础关键词词库的要求了,不过为了使得研究更加“高级”一些,可以考虑使用 Word2vec 来拓展关键词词库,主要是起到完善关键词词库的作用。

关于 word2vec 的理论知识就暂且不提了,主要是分析词汇间的相关度(相关度越高,两词汇越紧密),以下是如何使用 word2vec 的流程。

Gensim Python 的一个自然语言处理模块,该模块下命名为 word2vec 的模型封装了word2vec 的实现逻辑,可以使用它来进行 word2vec 算法操作:

pip install gensim

2.1 训练 word2vec 模型

word2vec 使用第一步是针对语料训练属于该语料数据的模型,特殊的一点在于,它需要针对每条评论/语料的的分词结果进行训练分析,这是因为 word2vec 本质在于分析词汇间的联系,他需要许多独立的分词结果进行解析。

代码如下:

import xlrd
from gensim.models import word2vec
from word_count import split_words_jieba

def wordcut_listinlist(url):
    '''读取excel评论并分别对每条评论进行分词操作'''
    excel = xlrd.open_workbook(url)  # 打开excel文件
    table = excel.sheet_by_index(0)  # 根据下标获取工作薄,这里获取第一个
    comments_list = table.col_values(1, start_rowx=1)  # 获取第一列的内容
    list = []
    for i in comments_list:
        a = split_words_jieba(i)
        list.append(a)
    return list  # [['xx','xx]、['X']、['XXX']]


def word2vec_trainmodel(url):  # 训练一次就行了
    '''Word2vec关键词扩展——训练模型'''
    sentennce = wordcut_listinlist(url)
    # 1.建立模型
    model = word2vec.Word2Vec(sentennce, vector_size=200)  # 训练skip-gram模型,默认window=5
    # 2.保存模型,以便重用
    model.save(u"word2vec_last.model")

if __name__ == "__main__":
    word2vec_trainmodel(baseHandle.get_file_abspath('语料库_京东_5000条评论.xlsx')) # 5000条评论,运行2分钟

随后同目录下会输出命名为 word2vec_last.model 的文件,这表示训练成功:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

2.2 使用模型—最终构建词库

然后就是直接使用该模型就行了,入参是某个关键词,输出 10 个与其相近的关键词,可修改 topn 来控制输出相关关键词的个数。

def similar_words(word):
    '''计算某个词的相关词列表——前提是已存在训练好的模型'''
    model1 = word2vec.Word2Vec.load("word2vec_last.model")  # 模型的加载方式
    y2 = model1.wv.most_similar(word, topn=10)  # 10个最相关的
    print("和{}最相关的词有:".format(word))
    for item in y2:
        print(item[0], '%.3f' % item[1])

if __name__ == "__main__":
    similar_words('物流')

比如查询“物流”的在该语料中最相关的关键词:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

接下来就可以依据现实情况给关键词词库添加关键词了,这都取决于你。我简单地给之前的物流关键词词库加 8 个关键词:

class BaseHandle(object):

    def __init__(self):
        # 物流关键词词库:目前28个物流关键词
        self.logistics_list = ['京东', '新鲜', '包装', '物流', '很快', '快递', '收到', '速度', '送货', '推荐',
                               '小哥', '服务', '发货', '配送', '送到', '到货', '第二天', '冷链', '完好', '送货上门'
                               # 使用word2vec加的关键词 👇
                               '严谨','保障', '效率', '方便快捷', '客服', '省心', '快捷', '严实']

当然这只是做个演示,实际研究时很难不上百。

2.3 Wordcloud 词云图

前边我们已经构建完物流关键词词库了,那么为了继续整活,可以给词库里的关键词做个词云图,这不就显得高大上了。

📌 物流关键词词频

虽然前边构建了词库,但是并不知道具体某个关键词的词频是多少,这时之前的【高频词统计.xlsx】就派上用场了。简单来说,就算依据每个物流关键词,遍历【高频词统计.xlsx】,找到属于每个物流关键词的词频,这是做关键词词库词云图的基础。

依旧将他放在工具类里边,代码如下:

import xlrd
import pandas as pd

'''
工具类
'''
class BaseHandle(object):

    def __init__(self):
        # 物流关键词词库:目前28个物流关键词
        self.logistics_list = ['京东', '新鲜', '包装', '物流', '很快', '快递', '收到', '速度', '送货', '推荐',
                               '小哥', '服务', '发货', '配送', '送到', '到货', '第二天', '冷链', '完好', '送货上门'
                               # 使用word2vec加的关键词 👇
                               '严谨','保障', '效率', '方便快捷', '客服', '省心', '快捷', '严实']

    def words_fre_match(self, filename, lis):
        '''关键词批量匹配词频'''
        df = pd.read_excel(filename)#'高频词统计.xlsx'
        b1 = []
        b2 = []
        for i in range(len(df)):
            keyword = df.loc[i, 'keyword']
            if any(word if word == keyword else False for word in lis):  # 判断列表(list)内一个或多个元素是否与关键词相同
                a1 = df.loc[i, 'keyword']
                a2 = df.loc[i, 'fre']
                b1.append(a1)
                b2.append(a2)
            else:
                continue
        f1 = pd.DataFrame(columns=['关键词', '词频'])
        f1['关键词'] = b1
        f1['词频'] = b2
        f1.to_excel('物流关键词词频匹配表.xlsx')

if __name__ == '__main__':
    base = BaseHandle()
    base.words_fre_match(os.path.abspath(os.getcwd() + '/01/高频词统计.xlsx'), base.logistics_list)
    pass

输出文件内容如下:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

📌 词云图

接下来就可以使用这个匹配表来绘制词云图了富裕的同学可以使用在线网站来进行制作,毕竟要比代码制作美观方便多了,比如:https://design.weiciyun.com/。

以下以 wordcloud 库绘制词云图为例,由于 wordcloud 库依赖 numpy 库和 PIL 库的,因此需要提前安装好这两个库。词云图有两种做法:

  1. 针对文本,先 jieba 分词,然后进行绘制
  2. 根据已知的词频进行绘制

那我们正是使用第二种方式,读取【物流关键词词频匹配表.xlsx】文件如下:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

把该方法放在工具类中,以下是简单绘制的代码:

import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud

class BaseHandle(object):

    def wordcloud_by_wordcount(self, url):
        '''根据词汇及对应词频绘制词云图'''
        data = pd.read_excel(url, sheet_name='Sheet1') # 获得数据
        data_gr = data.groupby(by='关键词', as_index=False).agg({'词频': int}) # 拿数据
        dic = dict(zip(data_gr['关键词'], data_gr['词频'])) # 转化为字典形式
        # print(dic)

        # fit_word函数,接受字典类型,其他类型会报错
        wordcloud = WordCloud(font_path='simhei.ttf', background_color="white", width=4000, height=2000,
                              margin=10).fit_words(dic)
        plt.imshow(wordcloud)
        plt.axis("off") # 取消坐标轴
        plt.show() # 显示

if __name__ == '__main__':
    base = BaseHandle()
    base.wordcloud_by_wordcount(os.path.abspath(os.getcwd() + '/01/物流关键词词频匹配表.xlsx'))
    pass

生成词云图如下:

基于 Jieba 和 Word2vec 的关键词词库构建,# NLP,word2vec,人工智能,自然语言处理,python

如果大家想制作更加精美的词云图,可继续深入研究~文章来源地址https://www.toymoban.com/news/detail-568438.html

到了这里,关于基于 Jieba 和 Word2vec 的关键词词库构建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习——Word2Vec

    参考资料: https://zhuanlan.zhihu.com/p/114538417 https://www.cnblogs.com/pinard/p/7243513.html 统计语言模型是基于 语料库 构建的 概率模型 ,用来计算一个词串 W = ( w 1 , w 2 , ⋯   , w T ) W=(w_1,w_2,cdots,w_T) W = ( w 1 ​ , w 2 ​ , ⋯ , w T ​ ) 构成句子的概率 : p ( W ) = p ( w 1 , w 2 , ⋯   . w T ) = p

    2024年02月11日
    浏览(43)
  • 【自然语言处理(NLP)】基于Skip-gram实现Word2Vec

    活动地址:[CSDN21天学习挑战赛](https://marketing.csdn.net/p/bdabfb52c5d56532133df2adc1a728fd) 作者简介 :在校大学生一枚,华为云享专家,阿里云星级博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程

    2024年02月09日
    浏览(47)
  • Word2Vec实现文本识别分类

    🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍦 参考文章:365天深度学习训练营-第N4周:用Word2Vec实现文本分类 🍖 原作者:K同学啊|接辅导、项目定制 语言环境:Python3.9.12 编译器:jupyter notebook 深度学习环境:TensorFlow2 本次内容我本来是使用miniconda的环境的,但是好

    2024年02月16日
    浏览(43)
  • Word2Vec的CBOW模型

    Word2Vec中的CBOW(Continuous Bag of Words)模型是一种用于学习词向量的神经网络模型。CBOW的核心思想是根据上下文中的周围单词来预测目标单词。 例如,对于句子“The cat climbed up the tree”,如果窗口大小为5,那么当中心单词为“climbed”时,上下文单词为“The”、“cat”、“up”

    2024年02月02日
    浏览(47)
  • 大语言模型系列-word2vec

    在前文大语言模型系列-总述已经提到传统NLP的一般流程: 传统的分词向量化的手段是进行简单编码(如one-hot),存在如下缺点: 如果词库过大, one-hot编码生成的向量会造成维度灾难 one-hot编码生成的向量是稀疏的,它们之间的距离相等,无法捕捉单词之间的语义关系。

    2024年01月18日
    浏览(37)
  • 一文了解Word2vec 阐述训练流程

      在机器学习领域,嵌入(embeddings)的概念无疑是其中最令人兴奋的创新之一。想象一下,每当你与 Siri 、 Google Assistant 、 Alexa 或 Google Translate 互动,甚至在使用具有下一个词预测功能的手机输入法(比如苹果输入法、搜狗输入法)时,你其实都在享受词嵌入模型带来的

    2024年02月05日
    浏览(48)
  • 【NLP】Word2Vec原理和认识

            Word2Vec是NLP领域的最新突破。Tomas Mikolov是捷克计算机科学家,目前是CIIRC(捷克信息学,机器人和控制论研究所)的研究员,是word2vec研究和实施的主要贡献者之一。词嵌入是解决NLP中许多问题不可或缺的一部分。它们描绘了人类如何向机器理解语言。您可以将它

    2024年02月12日
    浏览(36)
  • 自然语言处理-词向量模型-Word2Vec

    通常数据的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖 如何来描述语言的特征呢,通常都在词的层面上构建特征,Word2Vec就是要把词转换成向量 假设现在已经拿到一份训练好的词向量,其中每一个词都表示为50维的向量 如果在热度图中显示,结果

    2024年02月09日
    浏览(52)
  • 【NLP】Word2vec概念和演进史

            “万物都有一种模式,它是我们宇宙的一部分。它具有对称、优雅和优雅——这些品质你总能在真正的艺术家捕捉到的作品中找到。” ~ 沙丘 (1965)         对于word2vec,它不是一个或一种算法,而是一系列思想和算法的综合。本文通过有限篇幅,试图穿越思想跨

    2024年02月11日
    浏览(44)
  • NLP实战:使用Word2vec实现文本分类

    目录 一、数据预处理 1、加载数据 2. 构建词典 3.生成数据批次和迭代器 二、模型构建 1.搭建模型 2.初始化模型 3.定义训练与评估函数 三、训练模型 1. 拆分数据集并运行模型 2. 测试指定数据 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有) 🍖 作者

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包