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

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

if (ord($str{$i}) >= 129) {

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

$i++;

} else {

$str_tmp = $str{$i};

for ($j=$i+1; $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_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实现的中文分词类完整实例相关推荐

  1. php自定义中文分词方法,php实现的中文分词类完整实例

    本文实例讲述了php实现的中文分词类.分享给大家供大家参考,具体如下: 该中文分词类源码使用http://tools.jb51.net/code/jb51_php_format进行了格式化处理,便于阅 ...

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

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

  3. php中文分词类 关键词提取,php如何使用PHPAnalysis提取关键字中文分词

    需求:做SEO的keywords时,需要从标题或者正文里提取关键字 1.PHPAnalysis下载地址https://github.com/feixuekeji/PHPAnalysis 下载后解压放到 ...

  4. 中文分词技术之基于规则分词

    中文分词技术之基于规则分词 基于规则分词的基本思想 正向最大匹配法 逆向最大匹配法 双向最大匹配法 总结 词是中文语言理解中最小的能独立运用的语言单位.中文的词与词之间没有明显分隔标志,因此在分词技术 ...

  5. NLP ---分词详解(常见的五种分词技术二)

    上一篇我们讲了N一最短路径方法.基于词的n元文法模型,本节将主要介绍由字构词方法.基于词感知机算法的汉语分词方法.基于字的生成模型和区分式模型相结合的汉语分词方法,下面我们就开始讲解由字构词的方法: ...

  6. 深入浅出不可思议的中文分词技术

    亲爱的喵喵们,明天小夕就正式开学啦.开学后每周有几天的课比较多,小夕为了保证每篇文章的质量,可能做不到每天一更啦.但是小夕也会尽量挤出时间来写文章,尽量保证两三天更一篇.希望不要责怪小夕哦... 分词 ...

  7. NLP学习(二)中文分词技术

    运行平台: Windows Python版本: Python3.x IDE: PyCharm 一. 前言 这篇内容主要是讲解的中文分词,词是一个完整语义的最小单位.分词技术是词性标注.命名实体识别.关 ...

  8. NLP学习(二)—中文分词技术

    本次代码的环境: 运行平台: Windows Python版本: Python3.x IDE: PyCharm 一.    前言 这篇内容主要是讲解的中文分词,词是一个完整语义的最小单位.分词技术是词 ...

  9. 【原创】NLP中的中文分词技术

     NLP中的中文分词技术 作者:mjs (360电商技术组) 随着需求的变化和技术的发展,互联网企业对数据的分析越来越深入,尤其是自然语言处理处理领域,近几年,在搜索引擎.数据挖掘.推荐系统等应用方 ...

最新文章

  1. [开发]Resin 4.0.15重启时常见问题
  2. php memcache可存,php使用memcache共享存储session(二)
  3. 使用开源的驰骋表单设计器设计表单案例演示
  4. Papers with Code 2020 全年回顾
  5. 【UML】用例图Use Case diagram(转)
  6. AJAX(Asynchronous JavaScript And XML,异步JavaScript + XML)
  7. 独家揭秘阿里云SQL Server AlwaysOn集群版重大突破
  8. Android滑动页面返回(自定义控件)
  9. 2021-11-16
  10. C# Activator实例化类的一般步骤
  11. android 串口转usb,方口并口打印线
  12. 机器学习中:autopct = '%0.3f%%',代表的意思。
  13. cad页面布局快捷键_CAD页面设置管理器快捷键命令(如何设置页面布局)
  14. python读取excel文本单元格换行符_Excel自文本导入内容时如何做到单元格内换行...
  15. 仿SDWebImage
  16. YOLO系列文章汇总
  17. android UVCCamera could not negotiate with camera:err=-51
  18. 职业规划及核心竞争力
  19. c#窗体应用计算机设计,C#实验报告:Windows窗体设计.doc
  20. 眼睁睁的看着自己陷入“老鼠赛跑”的游戏

热门文章

  1. php 内部 邮件,php电子邮件形式内部服务器错误
  2. 有源带阻和无源带阻的区别_一文看懂AOC有源光缆与DAC高速线缆的差异
  3. 二叉树之孩子表示法以及前中后三种遍历法
  4. 安卓马赛克view_Android马赛克效果MosaicView
  5. AcWing479.加分二叉树(区间DP)题解
  6. 国王游戏(贪心 + 高精度乘法 + 高精度除法 + 高精度比较大小)
  7. 二分图判定(涂色问题)
  8. pip install时出现问题,ERROR: Could not install packages due to an OSError: ./lib/python3.7/site-packages
  9. 夏侯南溪搭建目标检测模型——文件结构设计篇
  10. 目标检测————主干网络是否应该选用DenseNet(提问)