HMM实现中文分词
链接:https://pan.baidu.com/s/1uBjLC61xm4tQ9raDa_M1wQ 提取码:f7l1
推荐:https://blog.csdn.net/longgb123/article/details/78154295
import sys
sys.path.append('保存文件的路径') #设置路径
# 下面三个文件在上面
from prob_emit import P as p_emit
from prob_start import P as p_start
from prob_trans import P as p_trans obs = '今天我来到北京清华大学' #观察值
states = 'BMES' V = [{}]
path = {} prev_states = {
'B': 'ES', # t时刻:t-1时刻
'M': 'BM',
'E': 'BM',
'S': 'SE'
} # 初始化 第一个字符作为 'BMES' 的概率
for y in states:
V[0][y] = p_start[y] + p_emit[y][obs[0]]
path[y] = y #概率: 输出概率(独立性概率:第k个字符状态为y的概率) + 转换概率(y0 --> y ) + 上一个字符状态为y0的概率(当前状态与上一个字符的状态有关) for k in range(1, len(obs)):
t0 = {} # 储存概率
path0 = {} # 储存路径 for y in states:
em_p = p_emit[y][obs[k]] # 输出概率 表示 第 k 个字符状态为 y 时 的输出概率 (prob, s0) = max((em_p+p_trans[y0][y]+V[-1][y0], y0) for y0 in prev_states[y]) # 动态规划
#上面的prob s0 就是在下面的每个循环中取tmp_prob tmp_s0 中取得最大值
# for y0 in prev_states[y]: # prev_state[y] 表示 t时刻 状态为 y 时的 t-1时刻可能出现的状态
# tmp_prob = em_p + p_trans[y0][y] + V[-1][y0]
# tmp_s0 = y0 t0[y] = prob
path0[y] = path[s0] + y path = path0
V.append(t0)
path
(prob, s0) = max((V[-1][y], y) for y in 'ES') s2 = []
for i, char in enumerate(obs):
sign = path[s0][i]
if(sign == 'B'):
begin = i
elif sign == 'E':
s2.append(obs[begin: i+1])
elif sign == 'S':
s2.append(obs[i])
else :
pass
s2
HMM实现中文分词的更多相关文章
- 自制基于HMM的中文分词器
不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...
- 转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器
http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的 ...
- 【中文分词】隐马尔可夫模型HMM
Nianwen Xue在<Chinese Word Segmentation as Character Tagging>中将中文分词视作为序列标注问题(sequence labeling ...
- 自制基于HMM的python中文分词器
不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...
- HMM(隐马尔科夫)用于中文分词
隐马尔可夫模型(Hidden Markov Model,HMM)是用来描述一个含有隐含未知参数的马尔可夫过程. 本文阅读了2篇blog,理解其中的意思,附上自己的代码,共同学习. 一.理解隐马尔科夫 ...
- 【中文分词】二阶隐马尔可夫模型2-HMM
在前一篇中介绍了用HMM做中文分词,对于未登录词(out-of-vocabulary, OOV)有良好的识别效果,但是缺点也十分明显--对于词典中的(in-vocabulary, IV)词却未能很好地 ...
- ANSJ中文分词使用方法
一.前言 之前做solr索引的时候就使用了ANSJ进行中文分词,用着挺好,然而当时没有写博客记录的习惯.最近又尝试了好几种JAVA下的中文分词库,个人感觉还是ANSJ好用,在这里简单总结之. 二.什么 ...
- R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...
- Python中文分词 jieba
三种分词模式与一个参数 以下代码主要来自于jieba的github,你可以在github下载该源码 import jieba seg_list = jieba.cut("我来到北京清华大学& ...
随机推荐
- Django学习之完成数据库主从复制、读写分离和一主多从情况下的使用办法
1.首先配置多个数据库,在settings配置文件中配置以下内容: DATABASES = { 'default': { #默认数据库,配置多个mysql数据也是ok的,混用数据库也是ok的 'ENG ...
- 改进遗传算法之CHC算法简要介绍
简要介绍: CHC算法是Eshelman于1991年提出的一种改进的遗传算法的缩称,第一个C代表跨世代精英选择(Cross generational elitist selection)策略, H代表 ...
- TinyML-TVM如何驯服TinyML
TinyML-TVM如何驯服TinyML 低成本,以人工智能为动力的消费类设备的激增,导致机器学习研究人员和从业人员对"裸机"(低功耗,通常没有操作系统)设备产生了广泛的兴趣.尽管 ...
- SOLO: 按位置分割对象
SOLO: 按位置分割对象 SOLO: Segmenting Objectsby Locations 论文链接: https://arxiv.org/pdf/1912.04488.pdf 代码链接: ...
- PyTorch数据加载处理
PyTorch数据加载处理 PyTorch提供了许多工具来简化和希望数据加载,使代码更具可读性. 1.下载安装包 scikit-image:用于图像的IO和变换 pandas:用于更容易地进行csv解 ...
- IPv6 与 IPv4现状
IPv6 与 IPv4现状 一.概述 (1) IPv4可提供bai4,294,967,296个地址,IPv6将原来的32位地址空间增大du到128位,数目是zhi2的128次方.能够对地球上每平方米d ...
- Keras神经网络集成技术
Keras神经网络集成技术 create_keras_neuropod 将Keras模型打包为神经网络集成包.目前,上文已经支持TensorFlow后端. create_keras_neuropod( ...
- CodeGen字段循环Field Loop
CodeGen字段循环Field Loop 字段循环是一个模板文件构造,它允许迭代CodeGen拥有的有关字段的集合.这些字段定义可以来自以下两个位置之一: •如果基于从存储库结构中获取的信息生成代码 ...
- docker 自定义部署Springboot——依赖与代码分离部署
第一步:执行mvn package 命令打出jar包,然后解压jar包,把lib放到服务器合适的目录下面 第二步:打出不带jar包的SpringBoot工程 首先配置pom.xml文件 <bui ...
- Java源码分析:Guava之不可变集合ImmutableMap的源码分析
一.案例场景 遇到过这样的场景,在定义一个static修饰的Map时,使用了大量的put()方法赋值,就类似这样-- public static final Map<String,String& ...