中文分词词云图

news2024/10/22 16:05:48

目录

  • 一、分词
    • 1、分词方式方法
    • 2、分词优缺点
  • 二、jieba使用示例
    • 1、引入库
    • 2、切分模式
    • 3、加载自定义字典
  • 三、词的可视化
    • 1、读取数据
    • 2、数据处理
    • 3、统计词频
    • 4、去除停用词
    • 5、词云图
      • 1、pyecharts绘图
      • 2、WordCloud绘图

一、分词

1、分词方式方法

  • 以构词规则为出发点的规则分词
    • 全切分
    • 正向最大匹配(FMM)/逆向最大匹配(BMM)/双向最大匹配
  • 利用语料库归纳出统计数据作为评判标准的统计分词
    • N-Gram概率模型
    • HMM概率模型
  • 上述方法除HMM外都需词典辅助!
    解释:
  • 全切分:指对输入的文本序列进行分词时,不仅考虑一种或几种可能的切分方式,而是尝试获取该序列的所有可能的切分形式
  • 正向最大匹配(Forward Maximum Matching,FMM):是一种基于词典的分词方法,常用于中文分词任务中。该方法的核心思想是按照从前到后的顺序对语句进行切分,尽可能匹配出当前位置上长度最大的词。原理:
    • 贪心策略:FMM使用贪心策略,从待分词句子的开头开始,每次尝试匹配词典中最长词的长度。
    • 词典依赖:FMM是基于词典的分词方法,词典中包含了已知的所有词汇及其长度信息
  • 逆向最大匹配(Backward Maximum Matching,简称BMM)是一种常用的中文分词算法,其工作原理与正向最大匹配(FMM)相反,即从待分词文本的末尾开始向前进行匹配。原理:
    • 从后向前匹配:BMM从待分词文本的最右边开始,逐步向左查找可能的词语;
    • 最长匹配优先:在每一步匹配中,BMM都尝试匹配尽可能长的词语。它首先会尝试匹配词典中最长的词,如果匹配失败,则逐步缩短匹配长度,直到匹配成功或长度为1的单个字。
  • (Bi-directional Maximum Matching,简称Bi-MM或BM)是一种结合了正向最大匹配(FMM)和逆向最大匹配(BMM)的中文分词方法。该方法通过比较正向和逆向分词的结果,以选择最可能的分词方式。原理:
    • 正向最大匹配(FMM):从左至右进行分词,每次尝试匹配词典中最长的词。
    • 逆向最大匹配(BMM):从右至左进行分词,同样每次尝试匹配词典中最长的词。
    • 结果比较:比较FMM和BMM的分词结果,并根据一定的策略选择最终的分词结果
  • N-Gram概率模型是一种基于统计语言模型的算法,广泛应用于自然语言处理领域。其核心思想是将文本序列分解为连续的n个元素(如字母、音节或单词)的序列,即“n-gram”,并计算这些序列出现的概率。原理:N-Gram模型基于一个假设:第n个词的出现与前n-1个词相关,而与其他任何词不相关。整个句子出现的概率就等于各个词出现的概率乘积。
  • HMM概率模型,即隐马尔可夫模型(Hidden Markov Model, HMM),是一种统计模型,用于描述一个含有隐含未知参数的马尔可夫过程。这种模型在序列数据建模中非常有用,特别是在那些数据包含无法直接观测到的隐藏状态的情况下。两个假设:
    • 齐次马尔科夫假设:状态转移的概率只与当前状态有关,与之前的状态无关。
    • 观测独立性假设:观测符号只依赖于生成它的隐藏状态,与其他隐藏状态无关。
      训练和预测:
    • 训练:使用Baum-Welch算法(也称为前向-后向算法)来估计HMM的参数。这是一个迭代的过程,通过最大化观测序列的概率来更新模型的参数。
    • 预测:使用维特比算法来找到给定观测序列下最可能的状态序列。这个算法基于动态规划,通过选择每一步的最优状态来找到全局最优解

2、分词优缺点

  • 规则分词
    • 优点:
      • 程序简单易行,开发周期短
      • 不涉及复杂计算,分词速度快
    • 缺点:
      • 歧义处理太过简单
      • 不能识别新词
      • 分词精度不能满足实际的需要
      • 规范的文本在80%左右
      • 互联网文本在70%左右
  • 统计分词
    • 优点
      • 能够处理大部分常用词带来的歧义问题
    • 缺点
      • 不能处理新词以及新词带来的歧义问题
      • 需要很大的训练语料
      • 分词速度相对较慢

常用的是jieba分词工具。

二、jieba使用示例

jieba 是Python中常用的一种中文分词工具,它可以将中文文本数据切分为一个一个的中文词语。

1、引入库

  • 安装方式:
pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 引入库
import jieba

2、切分模式

jieba.cut(sentence, cut_all=False, HMM=True)
  • 参数:
    • sentence: 需要被切分的字符串.
    • cut_all: 切分模式,True 对应全模式 False 对应 精确模式.
    • HMM: 是否使用隐马尔可夫模型.
  • 返回 generator

jieba.lcut用法与 jieba.cut一致,只是返回值为列表。

string="工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
jieba.lcut(string)

在这里插入图片描述

- 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义
   - t1 = jieba.cut(string, cut_all=True)

- 精确模式,试图将句子最精确地切开(分词后的概率连乘最大),适合文本分析。已被分出的词语将不会再次被其他词语占有。
   - t2 = jieba.cut(string, cut_all=False)

- 搜索引擎模式,在精确模式的基础上,对长词(字数>2)再次切分,提高召回率,适合用于搜索引擎分词。
   - t3= jieba.cut_for_search(string) 

在这里插入图片描述

3、加载自定义字典

sentence = """风暴降生丹妮莉丝·坦格利安一世、不焚者、弥林女王、安达尔人、洛伊拿人和先民的女王、草海上的卡丽熙、
奴隶解放者和火龙之母、维斯特洛的统治者暨全境守护者、阿斯塔波的解放者、弥莎和龙石岛公主"""
seq_sentence = jieba.lcut(sentence)
print("|".join(seq_sentence))

在这里插入图片描述
向词典中添加 新词"坦格利安",然后再次切分 :

jieba.add_word("坦格利安") 

在这里插入图片描述
jieba.load_userdict() 通过此函数加载公司内或行业内的专用词典,用于丰富默认词典

jieba.load_userdict('../data/NLP/user_dict.txt')

sentence = """风暴降生丹妮莉丝·坦格利安一世、不焚者、弥林女王、安达尔人、洛伊拿人和先民的女王、草海上的卡丽熙、奴隶解放者和火龙之母、维斯特洛的统治者暨全境守护者、阿斯塔波的解放者、弥莎和龙石岛公主"""
seq_sentence = jieba.lcut(sentence)
print("|".join(seq_sentence))

在这里插入图片描述
自定义默认字典

jieba.set_dictionary("../data/NLP/user_dict.txt")
jieba.initialize()

在这里插入图片描述

三、词的可视化

1、读取数据

import pandas as pd
data = pd.read_csv("../data/NLP/articles_20240308.csv")
data.head()

2、数据处理

  • 去除前后空格
data["channels"] = data.channels.str.strip()
  • 选择数据进行词切分
data = data.loc[data["channels"]=="港股",["articles"]]
data['cut'] = data.articles.apply(lambda x: jieba.lcut(x))
data_cut = data.cut.to_list()
data_cuts = [word for sent in data_cut for word in sent]
data_cuts[:20]

在这里插入图片描述

3、统计词频

import collections
collections.Counter(data_cuts).most_common(30)

在这里插入图片描述

4、去除停用词

with open("data/my_stop_words.txt",'r',encoding='utf-8') as f:
    stop_words = f.readlines()
   
stop_words = [word.strip("\n") for word in stop_words]
stop_words.extend(['\n'," ","月","日"]) # 扩展停用词
split_word = [word for word in data_cuts if word not in stop_words] #词过滤

# 再次统计词频
import collections
collections.Counter(split_word).most_common(30)

在这里插入图片描述

5、词云图

1、pyecharts绘图

工具包:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyecharts
from pyecharts import options as opts
from pyecharts.charts import WordCloud
# 下面代码对应jupyter lab,notebook是默认的绘图环境,按默认配置即可
from pyecharts.globals import CurrentConfig,NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB

data = collections.Counter(split_word).items()
wordcloud = (
    WordCloud()
    .add("", data, word_size_range=[20, 80],textstyle_opts=opts.TextStyleOpts(font_family="Microsoft YaHei",font_weight='bold'))
    .set_global_opts(title_opts=opts.TitleOpts(title="港股热词"))
)

wordcloud.render("0620港股热词.html")
wordcloud.load_javascript()

在这里插入图片描述

2、WordCloud绘图

工具包:

pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple 
import wordcloud
import matplotlib.pyplot as plt

txt = " ".join(split_word)
w = wordcloud.WordCloud(width=1000,
                        height=800,
                        font_path=r"C:\Windows\Fonts\simhei.ttf",
                        background_color = 'white')
wc = w.generate(txt)
plt.imshow(wc)
plt.axis('off');

在这里插入图片描述
修改词云图样式

import wordcloud
import matplotlib.pyplot as plt

backgroud_img = plt.imread("data/mask.jpg")
w = wordcloud.WordCloud(width=1000,
                        height=800,
                        font_path=r"C:\Windows\Fonts\simhei.ttf",
                        background_color = 'white',
                        mask=backgroud_img)
wc = w.generate(txt)
plt.imshow(wc)
plt.axis('off');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1844572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科普文章:怎么远程监控电脑屏幕?三种监控电脑屏幕的方法

远程监控公司电脑屏幕是一项重要的管理手段,它不仅有助于提升工作效率,还能确保公司信息安全和合规性。随着远程办公的普及,这一需求变得日益重要。下面我将详细介绍几种实现远程监控公司电脑屏幕的方法,以及实施过程中需要注意的…

看完再买不后悔!希喂、小米、霍尼韦尔宠物空气净化器性价比比拼

在忙碌的工作之余,养一只猫真的能治愈一切的不快,让我们的心灵得到片刻的宁静。然而,这份宁静背后,却隐藏着一些不易察觉的烦恼——猫浮毛和异味。 猫浮毛,这个看似微不足道的小问题,实则给许多宠物主人带…

我在高职教STM32——LCD液晶显示(2)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就…

LabVIEW_TDMS

1.TDMS设置属性 想给这里写属性怎么整 使用TDMS设置属性函数时,对组名称与通道名称不设置,即可达到上图中的样式。 PS:属性名称如果设置一样则最终生效的值为最后写入的值。如将属性2修改为属性1,则最终只有1个属性1&#xff0c…

C++语法04 标准输入语句

标准输入 使用格式:cin >> 输入的意思就是把一个值放到变量里面去,也就是变量的赋值,这个值是由我们自己输入的。 (注意:输入变量前要先定义,输入完之后要按Enter键。) 输入多个变量,与输出类似,…

基于一种改进熵方法的旋转机械故障诊断模型(MATLAB)

熵的概念起源于热力学,1884年,玻尔兹曼定义熵,用以描述分子热运动的无序性和混乱度。1948年,Shannon在其发表的《AMathematicalTheoryofCommunication》中提出香农熵,首次将“熵”引入信息度量范畴,为信息论…

C语言实现树和二叉树(二)

OK,各位未来的高级程序员们,大家好,今天我们来讲解一下二叉树这个部分的第二种存储结构---------链式存储结构,相信大家对这部分内容已经很期待了,但是,这里我们在开讲之前,要先补充一个知识&am…

AJAX 综合案例-day2

Bootstrap 弹框 功能:不离开当前页面,显示单独内容,供用户操作 步骤: 1. 引入 bootstrap.css 和 bootstrap.js 2. 准备 弹框标签 ,确认结构 3. 通过 自定义属性 ,控制弹框的 显示 和 隐藏 1. 通过属性…

SAP_FICO模块-获利能力段新增特征字段

业务背景: 公司有启用获利能力分析功能,有一个销售订单接口,是通过第三方销售订单管理平台推送数据到SAP的,用户希望对接新增一个编号ID到销售订单上,并且可以用KE24/KE30报表查看显示; 对于我这么一个后勤…

小程序打开空白的问题处理

小程序打开是空白的,如下: 这个问题都是请求域名的问题: 一、检查服务器域名配置了 https没有,如果没有,解决办法是申请个ssl证书,具体看这里 https://doc.crmeb.com/mer/mer2/4257 二、完成第一步后&#…

云动态摘要 2024-06-20

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 [低至1折]腾讯混元大模型产品特惠 腾讯云 2024-06-06 腾讯混元大模型产品特惠,新用户1折起! 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用 最新产品更新 [功能优化]费用…

栈,队列,数组,链表

一.数据结构概述 数据结构是计算机底层存储,组织数据的方式。 是指数据相互之间是以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据,需要结合具体的业务场景来进行选择。 一般情况下,精心选择的数据结构可以来更高的运行或者存储效率。 二.学好数据结构三大…

AI绘画ComfyUI-插件-面部修复,快速入门安装使用!

这期给大家分享一个插件AI绘画 ComfyUI的——Impact Pack ComfyUI也是隶属于Stable Diffusion的工作流形式的AI绘画工具。 这是一个综合节点,这期先介绍下这个插件中的面部修复功能 Impact Pack插件 1、下载插件 在ComfyUI管理器中安装节点,搜索Imp…

探索磁力搜索引擎:互联网资源获取的新视角

在当今数字化社会中,寻找和获取网络资源变得更加便捷和多样化。磁力搜索引擎作为这一趋势的一部分,提供了一种新颖而有效的方法来定位和获取用户所需的文件、媒体和其他数字内容。本文将深入探讨磁力搜索引擎的工作原理、使用场景及其在网络文化中的影响…

0.6 复合视频信号(CVBS)简介

0.6 复合视频信号简介 复合视频信号指在一个信号中包含了亮度信号、色度信号与同步信号(包括场同步、行同步信号及行场消隐信号)的视频信号。又可称为 CVBS,CVBS 为 Color,Video,Blanking,Sync 或者 compo…

酷得智能 电子方案开发 单片机方案定制

手持小风扇电子方案开发,东莞酷得智能科技有限公司为您服务 东莞市酷得智能科技有限公司 在消费类电子市场深耕多年,依托于市场团队对市场的敏锐度、工程团队的技术积累、结合自身的创新以及和上游原厂深度合作,在2.4G通信、BLE、语音、马达…

java实现一个LRU缓存算法。

//LRU(Least Recently Used)缓存算法是一种常见的缓存淘汰策略, // 它的基本思想是保留最近被访问过的数据,淘汰最久未被访问的数据。下面是一个使用Java实现的简单LRU缓存算法: import java.util.LinkedHashMap; impo…

【Unity】AssetBundle打包策略

【Unity】AssetBundle打包策略 在游戏开发过程中,AssetBundle(AB)打包策略的重要性不容忽视。游戏开发者往往手动设置游戏资源包名进行管理,难免会造成资源确实或导致冗余,因此对于AB包的打包流程来说,进行策略管理显得十分重要。…

正定矩阵(Positive Definite Matrix)

正定矩阵(Positive Definite Matrix) flyfish Positive(正数) :在数学和统计学中,通常指大于零的数。在矩阵理论中,一个矩阵被称为正定,是因为它的性质类似于正数的性质。 Defini…

聚合大模型场景助力产业升级,WAIC 2024 容联云论坛即将开幕

前 言 Introduction 2024世界人工智能大会暨人工智能全球治理高级别会议(简称“WAIC 2024”)即将拉开帷幕,在世界人工智能大会组委会办公室的指导下,容联云将于7月6日主办容联云生成式应用与大模型商业化实践论坛。本次论坛还将获…