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

该中文分词类源码使用http://tools.jb51.net/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= 129) {

$str_array[] = $str{$i} . $str{$i+1};

$i++;

} else {

$str_tmp = $str{$i};

for ($j=$i+1; $j

$char = $str_array[$pos-1];

if (is_array($char)) {

$str_final_tmp = $char[0];

if ($this->options['segment_english']) {

$str_final_tmp = preg_replace("/([!"#$%&'()*+,-./:;?@[\\]^_`{|}~tf]+)/", " $1 ", $str_final_tmp);

$str_final_tmp = preg_replace("/([!"#$%&'()*+,-./:;?@[\\]^_`{|}~tf])([!"#$%&'()*+,-./:;?@[\\]^_`{|}~tf])/", " $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; $i1; $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实现的中文分词类完整实例相关推荐

  1. php 分词技术,php实现的中文分词类完整实例

    本文实例讲述了php实现的中文分词类.分享给大家供大家参考,具体如下: class Segmentation { var $options = array('lowercase' => TRUE ...

  2. 中文分词方法汇总笔记

    中文分词方法汇总笔记 分词难点 分词方法 传统基于字典(规则分词) 基于机器学习的分词方法 统计分词 语言模型 隐马尔可夫 HMM 模型 其他 分词工具和云服务 其他 感谢知乎 @华天清 的总结 分词 ...

  3. 转一个,中文分词方法概述

    感兴趣的可以看看自然语言理解,很好的图书,可以了解中文的处理过程, 动态规划的中文分词方法      中文分词方法有很多,其中基于词典的分词方法有: 基于模式匹配的方法:(速度快)           ...

  4. 计算机毕设分词,毕业设计(论文)+计算机科学与技术+中文分词方法研究与实现论文全文.doc...

    毕业论文 中文分词方法研究与实现 计算机工程系学生姓名: 学号: 计算机工程系 计算机科学与技术系 部: 计算机科学与技术 专 业: 指导教师: 诚信声明 本人郑重声明:本设计(论文)及其研究工作是本 ...

  5. 计算机毕设——中文分词方法研究与实现

    毕业论文 中文分词方法研究与实现 1.课题意义及目标 中文分词技术不断发展,各种中文分词系统层出不穷.中文分词技术应用也原来越广泛.如搜索引擎的应用.语音识别系统.机器翻译.自动分类校对等.学生应通过 ...

  6. 动态规划的中文分词方法

    中文分词方法有很多,其中基于词典的分词方法有: 基于模式匹配的方法:(速度快) 正向最大匹配.逆向最大匹配法.双向匹配法 基于规则的方法:(索引压缩的效果最好) 最少分词法 基于统计的分词方法有: 统 ...

  7. 中文分词工具比较 6大中文分词器测试(哈工大LTP、中科院计算所NLPIR、清华大学THULAC和jieba、FoolNLTK、HanLP)

    中文分词工具比较 6大中文分词器测试(jieba.FoolNLTK.HanLP.THULAC.nlpir.ltp) 哈工大LTP.中科院计算所NLPIR.清华大学THULAC和jieba 个人接触的分 ...

  8. php自定义中文分词方法,PHPAnalysis中文分词类详解

    PHPAnalysis是目前广泛使用的中文分词类,使用反向匹配模式分词,因此兼容编码更广泛,现将其变量与常用函数详解如下: 一.比较重要的成员变量 $resultType   = 1        生 ...

  9. php自定义中文分词方法,一个用PHP写的中文分词函数_php

    class Segmentation { var $options = array('lowercase' => TRUE, 'segment_english' => FALSE); va ...

最新文章

  1. DevOps 的发展史
  2. 运维-nginx +php 错误状态码说明
  3. centos7.1 RabbitMQ安装配置
  4. Java课程设计——坦克大战
  5. 安卓怎么下载python-教你在安卓手机上安装python程序
  6. 软件架构最佳实践和案例分析
  7. 2017-2018-1 20155209 实验三 实时系统
  8. Python技巧:Docker框架的使用系列教程(一)
  9. OpenCASCADE:扩展数据交换(XDE)的简介
  10. SQL 语句递归查询 With AS 查找所有子节点
  11. 常见三种字符编码的区别:ASCII、Unicode、UTF-8
  12. Vmware 连接局域网通过桥接方式
  13. 5G iPhone SE即将试产 搭载A15仿生芯片采用4.7英寸屏幕
  14. 国庆档票房近50亿创纪录 背后影视股却遭遇集体下跌
  15. linux打包压缩文件并命名,linux下如何将文件打包、压缩并分割成制定大小
  16. 很酷的CSS3仿Facebook登录表单
  17. 合作的进化 6-10
  18. 防火墙——NAT穿越(IPSec3)
  19. 计算机创建快捷方式w10,win10中解决无法在桌面添加快捷方式的修复方法
  20. SAP License:FICO知识浓缩版

热门文章

  1. 【redismemcached】数据类型、内存管理、数据持久化和集群管理的区别
  2. 基于canvas的图片压缩函数实现
  3. Tjamie 谭传奇来报到
  4. XManager 远程连接Netbackup图形用户界面
  5. Linux SSH和SFTP服务分离
  6. UILabel简单高效实现圆角的方式
  7. Horizon View 6-客户端连接虚拟桌面⑹
  8. 虚拟主机的301重定向
  9. 开源爬虫larbin分析
  10. 只知道大数据?你out了