链接: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实现中文分词的更多相关文章

  1. 自制基于HMM的中文分词器

    不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...

  2. 转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器

    http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的 ...

  3. 【中文分词】隐马尔可夫模型HMM

    Nianwen Xue在<Chinese Word Segmentation as Character Tagging>中将中文分词视作为序列标注问题(sequence labeling ...

  4. 自制基于HMM的python中文分词器

    不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...

  5. HMM(隐马尔科夫)用于中文分词

    隐马尔可夫模型(Hidden Markov Model,HMM)是用来描述一个含有隐含未知参数的马尔可夫过程. 本文阅读了2篇blog,理解其中的意思,附上自己的代码,共同学习. 一.理解隐马尔科夫 ...

  6. 【中文分词】二阶隐马尔可夫模型2-HMM

    在前一篇中介绍了用HMM做中文分词,对于未登录词(out-of-vocabulary, OOV)有良好的识别效果,但是缺点也十分明显--对于词典中的(in-vocabulary, IV)词却未能很好地 ...

  7. ANSJ中文分词使用方法

    一.前言 之前做solr索引的时候就使用了ANSJ进行中文分词,用着挺好,然而当时没有写博客记录的习惯.最近又尝试了好几种JAVA下的中文分词库,个人感觉还是ANSJ好用,在这里简单总结之. 二.什么 ...

  8. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...

  9. Python中文分词 jieba

    三种分词模式与一个参数 以下代码主要来自于jieba的github,你可以在github下载该源码 import jieba seg_list = jieba.cut("我来到北京清华大学& ...

随机推荐

  1. Apache Flink 1.12.0 正式发布,DataSet API 将被弃用,真正的流批一体

    Apache Flink 1.12.0 正式发布 Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交 ...

  2. Linux shell脚本全面学习(一)

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...

  3. 关于Ajax 的 cache 属性 (Day_34)

    最近做项目,在某些页面显示,ajax刷新总是拿不到新内容,时常需要清除缓存,才能到达想要的效果. 经过再次查看文档,最后加了一行属性:cache:false 即可解决问题 我们先看下文档的说明: 可以 ...

  4. 记一次 .NET 某电商交易平台Web站 CPU爆高分析

    一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > ...

  5. systemverilog动态数组

  6. 动态更换animator的animatorcontroller

    你可以这样 Animator animator = this.gameObject.GetComponent<Animator>(); animator.runtimeAnimatorCo ...

  7. Redis(二) 数据类型操作指令以及对应的RedisTemplate方法

    1.Redis key值操作以及RedisTemplate对应的API 本文默认使用RedisTemplate,关于RedisTemplate和StringRedisTemplate的区别如下 Red ...

  8. 为什么edge AI是一个无需大脑的人

    为什么edge AI是一个无需大脑的人 Why edge AI is a no-brainer 德勤预计,到2020年,将售出超过7.5亿个edge AI芯片,即在设备上而不是在远程数据中心执行或加速 ...

  9. jmeter的参数化实现

    背景: 在实际的测试工作中,我们经常需要对多组不同的输入数据,进行同样的测试操作步骤,以验证我们的软件的功能.这种测试方式在业界称为数据驱动测试,而在实际测试工作中,测试工具中实现不同数据输入的过程称 ...

  10. SpringBoot注解 + 详解

    可以使用Ctrl + F搜索,也可以右侧目录自行检索 @SpringBootApplication 包含了@ComponentScan.@Configuration和@EnableAutoConfig ...