HMM实现中文分词
2024-08-28 09:05:45
链接: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
最新文章
- 基于android studio的快捷开发(将持续更新)
- 使用openssl的一些问题
- CentOS 7下的 Mysql 主从配置
- javaweb框架构想-自己的对象存储池-遁地龙卷风
- 老爷车IE8如何兼容图标字体
- MemPool
- Linux主机硬盘的主要规划
- ↗☻【HTML5秘籍 #BOOK#】第1章 HTML5简介
- informix 查看数据库空间名
- iOS开发学习--纯代码 UIScrollView 无限循环的实现——代码类封装
- 使用Java创建RESTful Web Service(转)
- Eclipse用法和技巧十五:自动添加未实现方法1
- 求n!末尾0的个数
- Linux下ansible的group模块
- getMemory的经典例子
- dict-test
- php如何以post形式发送xm并返回xmll数据
- rhce 第十一题 挂载NFS共享
- moodleform -转载于blfshiye
- shell脚本选择LOG里面特定的行,生成新文件并rsync上传