use encoding "gbk";
#load score哈希,这个Score是自己定的
open(Inscore, "<$ARGV[0]") or die "无法打开信息文件。\n";
%score=();
while(<Inscore>)
{chomp($_);if($_ eq ""){next;}@pair=();@pair=split("\t",$_); $score{$pair[0]}->{one}=$pair[1]/$pair[4];#频率
}
close(Inscore);
print "load done......\n";
# 句子 $sentence
# $num当前字在句子中的下标,$n_max字符串最大长度
# @scoretag[$num][$n_max]:记录当前最大分值矩阵
# @father[$num][$n_max]:记录父节点矩阵
         if($scoretag[$num][$my_j]==-1)
            {
                $scoretag[$num][$my_j]=0;
            }$n_pinghua_str=0.02;$n_pinghua=0.01;#这个平滑系数,要根据具体问题重新设定
open(Insentence,"<$ARGV[1]") or die "无法打开待分词文件\n";
while(<Insentence>)
{chomp($_);@word=split //,$_;$num=0;@scoretag=();@father=();#初始化第一个字for($i=0;$i<$n_max;$i++){$scoretag[$num][$i]=0;$father[$num][$i]=-1;}$scoretag[$num][0]=$n_pinghua;#以后为了做平滑,再说平滑系数if(defined $score{$word[$num]}){$scoretag[$num][0]=$score{$word[$num]}->{one};}#从第二字开始,viterbi 生成网格for($num=1;$num<@word;$num++){#my_j=0 代表当前字,=1 为当前字与前一个字,每层有$n_max个选择for($my_j=0;$my_j<$n_max and $my_j < $num+1 ;$my_j++){#找到父节点所在层,计算最大值,记录父节点$fatherlevel=$num - $my_j -1;#从$my_j 推算出,父节点应该在$num的哪一层。回退重要下标$scoretag[$num][$my_j]=-1;$father[$num][$my_j]=-1;if($fatherlevel > -1){for($father_j=0;$father_j <$n_max;$father_j++){if($scoretag[$num][$my_j] < $scoretag[$fatherlevel][$father_j])#分数相同取短者{$scoretag[$num][$my_j]=$scoretag[$fatherlevel][$father_j];$father[$num][$my_j]=$father_j;#回退重要下标}}}if($scoretag[$num][$my_i]==-1)$scoretag[$num][$my_i]=0;#生成当前字符串$keyword="";         for($sub=0;$sub<$my_j+1;$sub++){$keyword=$word[$num-$sub].$keyword;}#得到当前字符串的发射概率,本算法中暂时没有"转移概率"if(not defined $score{$keyword}){if($my_j ==0)#单字与字符串所给的频次不同,平滑{$nowscore_my_j=$n_pinghua;}else{$nowscore_my_j=$n_pinghua_str;}}else{$nowscore_my_j=$score{$keyword}->{one};}$scoretag[$num][$my_j]+=$nowscore_my_j;#print "$my_j\n";}}#回退#先找到回退入口,即$num-1最后一个字的值,哪个值最大。$maxfinal=0;$maxfather=-1;for($i=0;$i<$n_max;$i++){if($maxfinal < $scoretag[$num-1][$i]){$maxfinal = $scoretag[$num-1][$i];$maxfather=$i;}}#开始回退$i=$num-1;$output="";while($i>-1){$maxnextfather=$father[$i][$maxfather];for($j=0;$j<$maxfather+1 and $i>-1;$j++){$output=$word[$i].$output;$i--;}if($i >-1){$output="  ".$output;}$maxfather=$maxnextfather;}print "$output\n";}
close(Insentence);
#简单的viterbi分词代码,score即要用到的概率、语言模型、自己想什么作为分数就初始化score为什么;
#perl编程,简单版本,分数相加,(暂时没用转移概率矩阵)

viterbi 中文分词-超简单版相关推荐

  1. java中文分词的简单实现

    java中文分词的简单实现 中文分词 算法 算法思路 算法实现 代码及注释 评价 结语 中文分词 通俗来讲,中文分词是指将一句中文句子中的所有中文词汇相互分隔开来.它是文本挖掘的基础,有着十分广阔的应 ...

  2. 用计算机弹天空之城谱子,最简单的钢琴曲_天空之城超简单版本钢琴谱

    天空之城超简单版本钢琴谱 JPG,679x826,234KB,250_303 适合初学者的钢琴曲 简单 JPG,980x1337,231KB,250_341 欢乐颂钢琴谱最简单版 歌谱网 JPG,63 ...

  3. 四款python中文分词系统简单测试

    四款python中文分词系统简单测试: 注:中科院分词可采用调用C库的方式使用 纠正下:中科院分词2012支持关键词提取 准确率测试(使用对应项目提供在线测试,未添加用户自定义词典) 结巴中文分词ht ...

  4. 在Web开发中制作个人简历(超简单版)

    在Web开发中制作个人简历(超简单版) 文章目录 一.个人简历效果 二.部分代码解析 三.完整代码 四.实验小结 一.个人简历效果 二.部分代码解析 开头有部分代码以及在之前的文章中解析过,如果想看具 ...

  5. 课程设计——模仿网易云UI设计基础(超简单版)

    本来想把我自己做的东西放出来给你们的,但是解释起来有点难, 所以就先弄出一个简单版本,也就是可以过关的版本. 先上我的版本,如果要弄这种的可以私聊我好吧-0-. 简单版,好像花了3个小时吧.上图. 直 ...

  6. idea怎么更改推到github的路径_IDEA 拉取、上传、更新 项目到 Gitee+GitHub_超详细超简单版...

    注:本人使用的idea是最新版(2019.1.2),要是其他的版本的不要惊慌〜,基本上都一样,没有什么太大的差别的 首先我要说一下,拉取项目分两个,一个,你就没有项目,拉取仓库的整个项目,而另一种的, ...

  7. JDK8 下载与安装教程,超简单版(Windows)

    大家好,我是大鹅 最近换了新电脑,要安装开发环境 趁这个机会出一个安装教程,希望可以帮助到有需要的人. 下载JDK安装包 在个人的电脑上,我是比较喜欢使用zulu的JDK 不论是版本还是功能都非常齐全 ...

  8. 从0入手使用dtree(超简单版)

    首先到这个网址下载已经写好的dtree代码及其配置文件(如果网址失效了的话可以在评论区找我要这个文件): http://www.destroydrop.com/javascripts/tree/ 使用 ...

  9. 质数/素数筛选c++超简单版写法

    给出n: 按顺序输出1到n范围内的所有素数. #include <iostream> #include <bits/stdc++.h> using namespace std; ...

最新文章

  1. 一文讲解特征工程 | 经典外文PPT及中文解析
  2. php 不等待返回的实现方法(异步调用)
  3. php 处理对象用什么,程序处理的对象是什么
  4. 透露一下Java软件工程师面试常见问题集锦之一
  5. Vuex的store中的Module
  6. camel route 创建顺序
  7. B. Who‘s Opposite?
  8. Flyweight模式
  9. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(九)——运算放大器
  10. 空手套白狼,硬阅java字节码class文件
  11. 印度程序员和中国程序员的区别
  12. mac的python怎么打中文空格_中英文排版空格问题解决方案
  13. mysql的封锁协议_【眼见为实】数据库并发问题 封锁协议 隔离级别
  14. 偏微分方程matlab课件,MATLAB偏微分方程求解.ppt
  15. PCB板子焊接注意事项及小技巧
  16. 某程序员发现 CSDN官方“漏洞”,立省¥10000+,抓紧薅吧
  17. 第六届山东省赛总结贴
  18. java工作空间报错,java更改工作空间后报错
  19. 【单例】JAVA中的单例
  20. 人工神经网络实验报告,生成数据的神经网络

热门文章

  1. 什么是UID、UED、UXD、IXD、UCD、IAD,看这篇就足够了
  2. 小程序跳转公众号关注页面的两种方法
  3. CSFR(跨站请求伪造)攻击与防御
  4. 借助python用Tushare查询股票价格并存入Mysql数据库中
  5. 《C程序设计》读后感
  6. 牛客网练习-《网络基础》DAY1
  7. 重读经典(CLIP下):《Learning Transferable Visual Models From Natural Language Supervision》
  8. 微信屏蔽网址解决办法 微信QQ已经被屏蔽的域名怎么做跳转
  9. python 异常学习1
  10. 助力金融科技产业发展 360金融AI之夜成功举办