侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php实现的中文分词类完整实例

php  /  管理员 发布于 7年前   175

本文实例讲述了php实现的中文分词类。分享给大家供大家参考,具体如下:

该中文分词类源码使用http://tools..net.cn/code/jb51_php_format进行了格式化处理,便于阅读。具体代码如下:

class Segmentation {  var $options = array('lowercase' => TRUE,   'segment_english' => FALSE);  var $dict_name = 'Unknown';  var $dict_words = array();  function setLowercase($value) {    if ($value) {      $this->options['lowercase'] = TRUE;    } else {      $this->options['lowercase'] = FALSE;    }    return TRUE;  }  function setSegmentEnglish($value) {    if ($value) {      $this->options['segment_english'] = TRUE;    } else {      $this->options['segment_english'] = FALSE;    }    return TRUE;  }  function load($dict_file) {    if (!file_exists($dict_file)) {      return FALSE;    }    $fp = fopen($dict_file, 'r');    $temp = fgets($fp, 1024);    if ($temp === FALSE) {      return FALSE;    } else {      if (strpos($temp, "\t") !== FALSE) {        list ($dict_type, $dict_name) = explode("\t", trim($temp));      } else {        $dict_type = trim($temp);        $dict_name = 'Unknown';      }      $this->dict_name = $dict_name;      if ($dict_type !== 'DICT_WORD_W') {        return FALSE;      }    }    while (!feof($fp)) {      $this->dict_words[rtrim(fgets($fp, 32))] = 1;    }    fclose($fp);    return TRUE;  }  function getDictName() {    return $this->dict_name;  }  function segmentString($str) {    if (count($this->dict_words) === 0) {      return FALSE;    }    $lines = explode("\n", $str);    return $this->_segmentLines($lines);  }  function segmentFile($filename) {    if (count($this->dict_words) === 0) {      return FALSE;    }    $lines = file($filename);    return $this->_segmentLines($lines);  }  function _segmentLines($lines) {    $contents_segmented = '';    foreach ($lines as $line) {      $contents_segmented .= $this->_segmentLine(rtrim($line)) . " \n";    }    do {      $contents_segmented = str_replace(' ', ' ', $contents_segmented);    }    while (strpos($contents_segmented, ' ') !== FALSE);    return $contents_segmented;  }  function _segmentLine($str) {    $str_final = '';    $str_array = array();    $str_length = strlen($str);    if ($str_length > 0) {      if (ord($str{$str_length-1}) >= 129) {        $str .= ' ';      }    }    for ($i=0; $i<$str_length; $i++) {      if (ord($str{$i}) >= 129) {        $str_array[] = $str{$i} . $str{$i+1};        $i++;      } else {        $str_tmp = $str{$i};        for ($j=$i+1; $j<$str_length; $j++) {          if (ord($str{$j}) < 129) {$str_tmp .= $str{$j};          } else {break;          }        }        $str_array[] = array($str_tmp);        $i = $j - 1;      }    }    $pos = count($str_array);    while ($pos > 0) {      $char = $str_array[$pos-1];      if (is_array($char)) {        $str_final_tmp = $char[0];        if ($this->options['segment_english']) {          $str_final_tmp = preg_replace("/([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f]+)/", " $1 ", $str_final_tmp); $str_final_tmp = preg_replace("/([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f])([\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\\\]\^\_\`\{\|\}\~\t\f])/", " $1 $2 ", $str_final_tmp);        }        if ($this->options['lowercase']) {          $str_final_tmp = strtolower($str_final_tmp);        }        $str_final = " $str_final_tmp$str_final";        $pos--;      } else {        $word_found = 0;        $word_array = array(0 => '');        if ($pos < 4) {          $word_temp = $pos + 1;        } else {          $word_temp = 5;        }        for ($i=1; $i<$word_temp; $i++) {          $word_array[$i] = $str_array[$pos-$i] . $word_array[$i-1];        }        for ($i=($word_temp-1); $i>1; $i--) {          if (array_key_exists($word_array[$i], $this->dict_words)) {$word_found = $i;break;          }        }        if ($word_found) {          $str_final = " $word_array[$word_found]$str_final";          $pos = $pos - $word_found;        } else {          $str_final = " $char$str_final";          $pos--;        }      }    }    return $str_final;  }}?>

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • PHP中文分词 自动获取关键词介绍
  • 开源php中文分词系统SCWS安装和使用实例
  • PHP中文分词的简单实现代码分享
  • PHPAnalysis中文分词类详解
  • php实现scws中文分词搜索的方法
  • 使用Discuz关键词服务器实现PHP中文分词
  • 支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
  • php+正则将字符串中的字母数字和中文分割
  • php中文语义分析实现方法示例


  • 上一条:
    php实现图片按比例截取的方法
    下一条:
    PHPCMS手机站伪静态设置详细教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客