php 分词技术,php实现的中文分词类完整实例
本文实例讲述了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实现的中文分词类完整实例相关推荐
- php自定义中文分词方法,php实现的中文分词类完整实例
本文实例讲述了php实现的中文分词类.分享给大家供大家参考,具体如下: 该中文分词类源码使用http://tools.jb51.net/code/jb51_php_format进行了格式化处理,便于阅 ...
- php自定义中文分词方法,PHPAnalysis中文分词类详解
PHPAnalysis是目前广泛使用的中文分词类,使用反向匹配模式分词,因此兼容编码更广泛,现将其变量与常用函数详解如下: 一.比较重要的成员变量 $resultType = 1 生 ...
- php中文分词类 关键词提取,php如何使用PHPAnalysis提取关键字中文分词
需求:做SEO的keywords时,需要从标题或者正文里提取关键字 1.PHPAnalysis下载地址https://github.com/feixuekeji/PHPAnalysis 下载后解压放到 ...
- 中文分词技术之基于规则分词
中文分词技术之基于规则分词 基于规则分词的基本思想 正向最大匹配法 逆向最大匹配法 双向最大匹配法 总结 词是中文语言理解中最小的能独立运用的语言单位.中文的词与词之间没有明显分隔标志,因此在分词技术 ...
- NLP ---分词详解(常见的五种分词技术二)
上一篇我们讲了N一最短路径方法.基于词的n元文法模型,本节将主要介绍由字构词方法.基于词感知机算法的汉语分词方法.基于字的生成模型和区分式模型相结合的汉语分词方法,下面我们就开始讲解由字构词的方法: ...
- 深入浅出不可思议的中文分词技术
亲爱的喵喵们,明天小夕就正式开学啦.开学后每周有几天的课比较多,小夕为了保证每篇文章的质量,可能做不到每天一更啦.但是小夕也会尽量挤出时间来写文章,尽量保证两三天更一篇.希望不要责怪小夕哦... 分词 ...
- NLP学习(二)中文分词技术
运行平台: Windows Python版本: Python3.x IDE: PyCharm 一. 前言 这篇内容主要是讲解的中文分词,词是一个完整语义的最小单位.分词技术是词性标注.命名实体识别.关 ...
- NLP学习(二)—中文分词技术
本次代码的环境: 运行平台: Windows Python版本: Python3.x IDE: PyCharm 一. 前言 这篇内容主要是讲解的中文分词,词是一个完整语义的最小单位.分词技术是词 ...
- 【原创】NLP中的中文分词技术
NLP中的中文分词技术 作者:mjs (360电商技术组) 随着需求的变化和技术的发展,互联网企业对数据的分析越来越深入,尤其是自然语言处理处理领域,近几年,在搜索引擎.数据挖掘.推荐系统等应用方 ...
最新文章
- [开发]Resin 4.0.15重启时常见问题
- php memcache可存,php使用memcache共享存储session(二)
- 使用开源的驰骋表单设计器设计表单案例演示
- Papers with Code 2020 全年回顾
- 【UML】用例图Use Case diagram(转)
- AJAX(Asynchronous JavaScript And XML,异步JavaScript + XML)
- 独家揭秘阿里云SQL Server AlwaysOn集群版重大突破
- Android滑动页面返回(自定义控件)
- 2021-11-16
- C# Activator实例化类的一般步骤
- android 串口转usb,方口并口打印线
- 机器学习中:autopct = '%0.3f%%',代表的意思。
- cad页面布局快捷键_CAD页面设置管理器快捷键命令(如何设置页面布局)
- python读取excel文本单元格换行符_Excel自文本导入内容时如何做到单元格内换行...
- 仿SDWebImage
- YOLO系列文章汇总
- android UVCCamera could not negotiate with camera:err=-51
- 职业规划及核心竞争力
- c#窗体应用计算机设计,C#实验报告:Windows窗体设计.doc
- 眼睁睁的看着自己陷入“老鼠赛跑”的游戏
热门文章
- php 内部 邮件,php电子邮件形式内部服务器错误
- 有源带阻和无源带阻的区别_一文看懂AOC有源光缆与DAC高速线缆的差异
- 二叉树之孩子表示法以及前中后三种遍历法
- 安卓马赛克view_Android马赛克效果MosaicView
- AcWing479.加分二叉树(区间DP)题解
- 国王游戏(贪心 + 高精度乘法 + 高精度除法 + 高精度比较大小)
- 二分图判定(涂色问题)
- pip install时出现问题,ERROR: Could not install packages due to an OSError: ./lib/python3.7/site-packages
- 夏侯南溪搭建目标检测模型——文件结构设计篇
- 目标检测————主干网络是否应该选用DenseNet(提问)