中文分词词云图

目录

  • 一、分词
    • 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.mfbz.cn/a/727693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

平安养老险黄山中支开展“反洗钱电影送下乡”活动

为不断增强反洗钱教育宣传的精准性和有效性,提升乡村群众的洗钱风险防范意识,6月18日,在中国人民银行黄山市分行的部署和指导下,平安养老保险股份有限公司(以下简称“平安养老险”)黄山中心支公司、平安人寿…

服务器主机托管服务内容科普

在现代信息技术快速发展的背景下,服务器主机托管服务已成为众多企业、机构和个人不可或缺的一部分。本文将为您详细科普服务器主机托管服务的内容,帮助您更好地理解和选择适合自己的托管方案。 一、硬件与基础设施 服务器主机托管服务首先提供了硬件和网…

HTML静态网页成品作业(HTML+CSS)—— 家乡成都介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

数据库异常恢复2-备份文件恢复(快速恢复的手动启动方式)

(四) 备份文件备份恢复的概念 本次所说的数据恢复有异于数据的导入导出 1. 备份工具 gbase8s数据库提供了两种工具进行完成系统物理备份、逻辑日志备份和系统恢复:ontape和onbar ontape:提供了基本的系统物理备份、日志备份和恢复能力,其…

多目标跟踪中用到的求解线性分配问题(Linear Assignment Problem,LAP)Python

多目标跟踪中用到的求解线性分配问题(Linear Assignment Problem,LAP)Python flyfish 如果想看 C版本的,请点这里。 线性分配问题(LAP,Linear Assignment Problem)是一个经典的优化问题&…

java实现分类下拉树,点击时对应搜索---后端逻辑

一直想做分类下拉,然后选择后搜索的页面,正好做项目有了明确的需求,查找后发现el-tree的构件可满足需求,数据要求为:{ id:1, label:name, childer:[……] }形式的,于是乎,开搞! 一…

如何下载DVS Gesture数据集?解决tonic.datasets.DVSGesture错误HTTP Error 403: Forbidden

1 问题 DVSGesture数据集是一个专注于动态视觉传感(Dynamic Vision Sensor, DVS)技术的数据集,它包含了基于事件的图像记录,用于手势识别任务。DVSGesture数据集由一系列动态图像组成,这些图像是通过动态视觉传感器捕…

免费分享:GIS插件-ARCGIS一键拓扑(模型构建器)(附下载方法)

工具详情 ARCGIS一键拓扑(模型构建器),可直接在ArcGIS中安装使用。 可试用本工具进行数据拓扑检查。 下载方法 下载地址:https://open.geovisearth.com/service/resource/150下载流程:点击上面的下载地址,打开数字地球开放平台…

数据结构-绪论

目录 前言一、从问题到程序二、数据结构的研究内容三、理解数据结构3.1 数据3.2 结构3.2.1 逻辑结构的分类3.2.2 存储结构的分类 3.3 数据结构 四、数据类型和抽象数据类型4.1 抽象数据类型的定义格式4.2 抽象数据类型的实现 总结 前言 本篇文章先介绍数据结构的研究内容&…

php反序列化的一些知识

问题 <?php $raw O:1:"A":1:{s:1:"a";s:1:"b";}; echo serialize(unserialize($raw)); //O:1:"A":1:{s:1:"a";s:1:"b";}?> php反序列化的时按理说找不到A这个类&#xff0c;但是他没有报错&#xff0c;…

SAR动目标检测系列:【4】动目标二维速度估计

在三大类杂波抑制技术(ATI、DPCA和STAP)中&#xff0c;STAP技术利用杂波与动目标在二维空时谱的差异&#xff0c;以信噪比最优为准则&#xff0c;对地杂波抑制的同时有效保留动目标后向散射能量&#xff0c;有效提高运动目标的检测概率和动目标信号输出信杂比&#xff0c;提供理…

C++学习(23)

#学习自用# union 共用体和结构体相似&#xff0c;但是共用体一次只能占用一个成员的内存&#xff0c;所有成员共用同一地址。 #include<iostream> using namespace std; union A {int int_val;float float_val; }a; int main() {a.float_val 2.0f;cout << a.f…

【AWS SMB 能力最佳实践】利用 MGN 解决方案实现跨AWS账号迁移Amazon EC2 实例、弹性IP地址等资源

文章目录 一、实验情景二、实验关键服务概述2.1 MGN解决方案2.2 VPC对等连接 三、实验架构示意图四、实验具体操作步骤4.0 创建访问密钥4.1 创建VPC资源4.1.1 在源账号上创建VPC4.1.2 在目标账号上创建VPC 4.2 创建对等连接✨4.2.1 发起对等连接请求4.2.2 接受对等连接请求4.2.…

【内含优惠码】重磅发售!《2023年度中国量化投资白皮书》(纸质版)

这是可以公开了解量化行业图景的&#xff0c;为数不多资料。 简介 《2023年度中国量化投资白皮书》由宽邦科技、华泰证券、金融阶、华锐技术、AMD、阿里云、英迈中国等多家机构联合发起编写&#xff0c;并于2024年6月15日正式发布&#xff0c;全书公17万字6大章节勾勒最新量化…

torch.optim 之 Algorithms (Implementation: for-loop, foreach, fused)

torch.optim的官方文档 官方文档中文版 一、Implementation torch.optim的官方文档在介绍一些optimizer Algorithms时提及它们的implementation共有如下三个类别&#xff1a;for-loop, foreach (multi-tensor), and fused。 Chat-GPT对这三个implementation的解释是&#xf…

算法设计与分析 实验4 动态规划法求扔鸡蛋问题

目录 一、实验目的 二、问题描述 三、实验要求 四、实验内容 动态规划法 算法描述 算法伪代码描述 算法复杂度分析 数据测试 二分优化的动态规划法 算法描述 二分优化&#xff1a; 算法伪代码 算法复杂度分析 数据测试 单调决策优化的动态规划法 算法描述 算…

【Ardiuno】实验使用ESP32接收电脑发送的串口数据(图文)

使用ESP32可以非常方便的与电脑进行串口通讯&#xff0c;一般我们可以用串口接收ESP32的输出作为调试使用&#xff0c;今天我们再来实验一下从电脑端向ESP32单片机发送数据。 发送数据程序代码&#xff1a; void setup() {Serial.begin(9600); }void loop() { if(Serial.ava…

股票核心因子解读以及如何从接口获取股票数据信息

目录 1 股票基础信息1.1 股票核心因子1.2 获取股票信息 2 如何从接口获取股票数据2.1 yfinance2.2 finnhub-python2.3 alpha_vantage2.4 efinance2.4 Tushare 3 如何从各大金融平台获取咨询信息3.1 国外3.2 国内 1 股票基础信息 1.1 股票核心因子 基本面因子 因子名称计算公…

前缀和+双指针,CF 131F - Present to Mom

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 131F - Present to Mom 二、解题报告 1、思路分析 很经典的一种把列看作cell 来进行双指针/递推的题型 我们考虑&#xff0c;可以预处理出原矩阵中的所有star 然后我们去枚举矩形的上下边界&#xff0c;把…

java读取wps嵌入式图片思路

这个只写了思路具体代码在文章最后&#xff0c;不想了解得直接去拿代码 了解Excel数据结构 Excel 文件格式后缀xls,xlsx 其实是一个压缩文件&#xff0c;是由多个文件夹以及xml 文件组合为一个文件&#xff0c;xml文件记录了Excel得内容以及样式等信息。加入在桌面新建一个xls…