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

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

该中文分词类源码使用http://tools.ddpool.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

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("/([\!\"\#\$\%\&\'()*+,-./:;&;=&;&;@[\\]^_`{|}~tf]+)/", " $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程序设计有所帮助。 ad51e517755f8fd6a7ec83ced4ecfaf3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php打开rs232,php_ser_5.2.0-5.2.17

php_ser_5.2.0-5.2.17所属分类&#xff1a;WEB开发开发工具&#xff1a;PHP文件大小&#xff1a;169KB下载次数&#xff1a;62上传日期&#xff1a;2011-09-23 11:30:16上 传 者&#xff1a;随寻说明&#xff1a; php实现RS232串口通信下载php_ser_5.2.0.zip解冻把php_ser放到…

使用php,使用 PHP

使用 PHP推荐查看本文HTML版本本节汇集了你在写 PHP 脚本时可能碰到的大多数普通错误。1. 我想写一个可以处理任何表单来的数据的通用 PHP 脚本。我怎么知道哪个 POST 方法变量可用呢&#xff1f;2. 我需要在所有的单引号()前加一个反斜线(\)&#xff0c;使它们变成(\)&#xf…

手机电脑自适应导航源码php,自适应各终端懒人网址导航源码 v2.0

自适应各终端懒人网址导航源码。V2.0版本是在原1.8版本的基础上修复和增加了些功能。推荐直接使用新版本&#xff0c;舍弃旧版本&#xff0c;后期会继续不定期更新。测试环境&#xff1a;宝塔Nginx -Tengine2.2.3的php5.5mysql先导入数据库文件db/db.sql再修改config.php数据库…

php如何生成本地文档,php如何生成word文件

php生成word文件的方法&#xff1a;需求&#xff1a;甲方爸爸说“我有一个word文件&#xff0c;里面是关于用户信息的表格&#xff0c;你帮我把系统里面所有用户数据都按照这个文件导出来给我“&#xff1b;我当时就不乐意了&#xff0c;啪的一拍桌子站起来&#xff0c;愤愤的回…

php 写一个大富翁游戏,C++大富翁代码 现在要设计一个类似“大富翁”的游戏:有一条由20个格子组成的 联合开发网 - pudn.com...

C大富翁代码所属分类&#xff1a;Windows编程开发工具&#xff1a;C/C文件大小&#xff1a;349KB下载次数&#xff1a;6上传日期&#xff1a;2018-05-15 21:11:38上 传 者&#xff1a;红黑二叉树说明&#xff1a; 现在要设计一个类似“大富翁”的游戏&#xff1a;有一条由20个…

yii 引用php文件,Yii中引出php文件及插件

Yii中引入php文件及插件作者&#xff1a;zccst一、设置环境变量(在PHP)echo get_include_path(); //获取当前所有环境变量。即该项目中那些代码已被引用。set_include_path(.. PATH_SEPARATOR . Yii::app()->basePath./lib/PHPExcel . PATH_SEPARATOR . get_include_p…

形态学图像分割matlab算法,图像分割和形态学处理与MATLAB实现

《图像分割和形态学处理与MATLAB实现》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《图像分割和形态学处理与MATLAB实现(13页珍藏版)》请在人人文库网上搜索。1、实验 图像分割和形态学处理一、实验目的1、 掌握图像分割的基本方法。2、 掌握形态学处理的基本方法。…

php 显示状态,php-fpm status状态配置显示

系统为ubuntu,在usr/etc/sites-enabled/中编辑nginx配置文件server_name demo.com;location ~^/status$ {#auth_basic "status page";#fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;include fastcgi_params;fastcgi_pass unix:/var/…

matlab 动态目录调用程序集,C#中如何动态添加程序集查找目录

C#中如何动态添加程序集查找目录情况如下&#xff1a;现有三个程序集Main.exe, One.dll, Two.dll。其中One.dll引用了Two.dll&#xff0c; 并且One.dll与Two.dll部署在一起, 而Main.exe单独部署。在One.dll中有using Two;namespace One{public SomeType{public void DoSomethin…

matlab 红黑强度图片,matlab图形锐化程序

满意答案gveial5852013.10.31采纳率&#xff1a;50% 等级&#xff1a;12已帮助&#xff1a;11498人help imreadhelp fspecial imfilt帮助稳定中有较多的示例fspecial 函数功能&#xff1a;产生预定义滤波器格式&#xff1a;Hfspecial(type)Hfspecial(gaussian,n,sigma) 高斯…

php chr 乱码,php chr() ord()中文截取乱码问题解决方法_PHP教程

复制代码 代码如下:/* 另一种方法&#xff0c;使用ord()函数&#xff1a; 适用于 gb2312 编码:*/$str "怎么将新闻的很长的标题只显示前面一些字&#xff0c;后面用.....来代替&#xff1f;";function gb2312_substr($str, $limit) {$restr ;for($i0;$i< $limit-…

matlab int8 函数,未定义与 'uint8' 类型的输入参数相对应的函数 'fitnessty'

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼程序如下&#xff1a;clear allclcticpopsize15;lanti10;maxgen50;cross_rate0.4;mutation_rate0.1;a00.7;zpopsize5;bestf0;nf0;number0;Iimread(C:\Users\Yu\Pictures\feiji.jpg);if numel(I)>2Irgb2gray(I);end[m,n]size(I);…

php_os用法,golang中os包用法

os包中实现了平台无关的接口&#xff0c;设计向Unix风格&#xff0c;但是错误处理是go风格&#xff0c;当os包使用时&#xff0c;如果失败之后返回错误类型而不是错误数量&#xff0e;os包中函数设计方式和Unix类似&#xff0c;下面来看一下&#xff0e;func Chdir(dir string)…

python n个人围成一圈,Python练习代码实例69-有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的...

Python 练习实例69题目&#xff1a;有n个人围成一圈&#xff0c;顺序排号。从第一个人开始报数(从1到3报数)&#xff0c;凡报到3的人退出圈子&#xff0c;问最后留下的是原来第几号的那位。程序分析&#xff1a;无。程序源代码&#xff1a;#!/usr/bin/python# -*- coding: UTF-…

php基础学哪些,榆林学习php需要哪些基础(PHP是什么)

榆林学习php需要哪些基础&#xff0c;想多学一门知识&#xff0c;陕西PHP培训对我们都是大有裨益的&#xff0c;紧接着就去了解下php代码运行方式有哪些&#xff0c;php常用框架有哪些&#xff0c;php为啥遭到它行鄙视&#xff0c;PHP是什么&#xff0c;php的性质有哪些&#x…

.deploy 文件 php,关于php:Heroku deploy自动删除服务器文件?

我是HEROKU APPS的新手。在我的heroku应用程序中&#xff0c;我遇到了问题。 那就是我正在使用php脚本将数据保存在服务器上。范例&#xff1a;$file "example.txt";$data "Something...";file_put_contents($file,$data);?>此PHP脚本成功运行并完美保…

php打印中文前一天时间,【多选题】用PHP打印出前一天的时间格式是2012-4-2 12:28:21( ) A. date(\Y-m-d H:i:s\, strtotime(\-1 day\...

【多选题】用PHP打印出前一天的时间格式是2012-4-2 12:28:21( )A. date(\"Y-m-d H:i:s\", strtotime(\"-1 day\",time())) B. date更多相关问题不计饱和时&#xff0c;电枢反应电势可以写成负的电抗压降形式。()某矩形见面简支梁&#xff0c;混凝土强度等级…

oracle11g memory_target,Oracle11g启动报:ORA-00845: MEMORY_TARGET not supported on this system

SQL> startupORA-00845: MEMORY_TARGET not supported on this systemoraclesles11:/oracle/product/11.2.4/dbs> df -h /dev/shmFilesystem Size Used Avail Use% Mounted ontmpfs 1.5G 72K 1.5G 1% /dev/shm--memory_target 大于 /dev/shmoracles…

oracle 11gr2 asm安装,OEL6.1下oracle 11gr2 ASM安装

oracle 11gr2下asm与以往不同&#xff0c;是使用grid安装包来完成安装与配置&#xff0c;在11.2.0.3的安装包中&#xff0c;使用第三个安装包&#xff0c;解压以后进行以下配置&#xff1a;1. Asm相关用户及组配置/usr/sbin/groupadd -g 502 oper/usr/sbin/groupadd -g 600 asm…

oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组

ASM学习笔记_配置ASMLIB磁盘组目录1 ASMLIB Introduction2 虚拟机添加一个共享磁盘(块设备)3 下载,安装ASMLIB4 配置,使用ASMLib 磁盘组#######################################################################1 ASMLIB Introduction######################################…