“懒人”的做法——用PHP简易实现中文分词

2016-01-29 13:23 15 1 收藏

“懒人”的做法——用PHP简易实现中文分词,“懒人”的做法——用PHP简易实现中文分词

【 tulaoshi.com - PHP 】

作者: Maco 

 

hehe, 用javascript:;">PHP去做中文分词并不是一个太明智的举动, :p

下面是我根据网上找的一个字典档, 简易实现的一个分词程序.

(注: 字典档是gdbm格式, key是词 value是词频, 约4万个常用词)

完整的程序演示及下载请参见: http://root.twomice.net/my_php4/dict/chinese_segment.php

<?php
//中文分词系统简易实现办法
//切句单位:凡是ascii值<128的字符
//常见双字节符号:《》,。、?“”;:!¥…… %$#@^&*()[]{}|\/"'
//可以考虑加入超常见中文字: 的 和 是 不 了 啊 (不过有特殊字比如 "打的" "郑和" .. :p)

//计算时间
function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();


//词典类
class ch_dictionary {
    var $_id;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

    function ch_dictionary($fname = "") {
        if ($fname != "") {
            $this-load($fname);
        }
    }

    // 根据文件名载入字典 (gdbm数据档案)
    function load($fname) {
        $this-_id = dba_popen($fname, "r", "gdbm");
        if (!$this-_id) {
            echo "failed to open the dictionary.($fname)<brn";
            exit;
        }
    }

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

    // 根据词语返回频率, 不存在返回-1
    function find($word) {
        $freq = dba_fetch($word, $this-_id);
        if (is_bool($freq)) $freq = -1;
        return $freq;
    }
}

// 分词类: (逆向)
// 先将输入的字串正向切成句子, 然后一句一句的分词, 返回由词组成的数组.
class ch_word_split {
    var $_mb_mark_list;    // 常见切分句子的全角标点
    var $_word_maxlen;    // 单个词最大可能长度(汉字字数)
    var $_dic;        // 词典...
    var $_ignore_mark;    // true or false
   
    function ch_word_split () {
        $this-_mb_mark_list = array(","," ","。","!","?",":","……","、","“","”","《","》","(",")");
        $this-_word_maxlen  = 12;    // 12个汉字
        $this-_dic = NULL;
        $this-_ignore_mark = true;
    }

    // 设定字典
    function set_dic($fname) {
        $this-_dic = new ch_dictionary($fname);
    }

    function set_ignore_mark($set) {
        if (is_bool($set)) $this-_ignore_mark = $set;
    }

    // 将字串切成句子再加以切分成词
    function string_split($str, $func = "") {       
        $ret = array();
       
        if ($func ==

来源:https://www.tulaoshi.com/n/20160129/1489985.html

延伸阅读
标签: PHP
  作者:hutuworm 来源:糊涂馋寺 目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了 验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输 入表单提交网站验证,验证成功后才能使用某项功能。 我们这里展示...
标签: PHP
  图片链接广告大概是最为常用的网络广告模式,但是多条广告的动态随机显示可不是那么简单的事情。PHP的文件上传函数提供了在这块468x60像素的区域(网页广告的标准尺寸)实现能够根据权值大小而随机显示广告的解决方案,从而避免了开发FTP程序或是ASP和Perl CAI中需要外挂扩展才能实现此项功能的弊端。       ...
标签: PHP
        由于Internet的历史原因,apin负责整个网络IP的整体规划以及北美区 还有部分非洲地区的IP分配管理,与此相应的是,whois.apin.net是IP whois的root server,标准的IP whois查询方法是,首先向whois.apin.net查询某个IP属于哪个大区,然后再向该区的whois 服务器查询此IP的whois详细信息。   ...
标签: PHP
       <?php   /*   如有转载,请注明作者      作者: 何志强   文件: ubb.php   备注: 说是改进,其实核心函数parse()已经完全重写了,而且思路也是不一样的。   不过仍是受何志强的例子的启发,而且测试的例子还有URLCHECK等...
标签: PHP
  在最近几年,万维网(也称环球信息网,即WWW)不断改变信息处理技术的面貌。WEB已经快速地成为一种有效的媒介,并适合人们和商业沟通和协作。几乎所有的信息技术领域都普遍受到WEB的影响。Web访问带来更多用户和更多数据,这意味着给服务器和数据库更多压力和最终用户得到越来越慢的响应速度。与不断靠增加CPU,磁盘驱动器及内存来跟上...