一个用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写的中文分词函数相关推荐

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

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

  2. 已知计算组合的公式如下,用递归算法写出一个计算组合Cmn的值的函数zh(m,n),并写出主函数调用该函数。

    /* 已知计算组合数的公式如下,用递归算法写出一个计算组合Cmn的值的函数zh(m,n),并写出主函数调用该函数. 输入 两个整数 m,n(m>=n)输出 组合值样例输入 4 2 样例输出 6 ...

  3. 面试让写一个“bind”函数,详解五层bind函数进阶写法,带你写出一个让面试官满意的 “bind” 函数

    文章目录 手写bind函数 第一层 - 绑定在原型上的方法 第二层 - 改变this的指向 第三层 - 支持柯里化 第四层 - 考虑 new 的调用 第五层 - 保留函数原型 总结最终版bind函数 ...

  4. 1. 写出一个能创建多级目录的 PHP 函数(新浪网技术部)

    function create_dir($path,$mode){if (is_dir($path)){echo "该目录已经存在";}else{if(mkdir($path,$m ...

  5. “应付”大学作业,我花3小时写了一个“文本转手写”神器

    作者 | Saurabh Daware 译者 | 弯月,责编 | 郭芮 来源 | CSDN(ID:CSDNnews) 最近,有一个名叫Saurabh Daware的印度大学生只花了3个小时就编写了一款 ...

  6. 阿里程序员写了一个新手都写不出的低级bug,被骂惨了。

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和 ...

  7. 我写了一个“文本转手写”神器来搞定作业!

    作者 | Saurabh Daware 译者 | 弯月,责编 | 郭芮 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 最近,有一个名叫Saurabh ...

  8. php函数库快速记忆法_史上最全的php函数大全

    定义了一下方法,具体用法可查百度 usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID ...

  9. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...

最新文章

  1. 不是报错就是崩盘,这些代码迁移问题你遇到过几个?
  2. 《理解 ES6》阅读整理:块绑定(Block Binding)
  3. Java 面试知识点解析(二)——高并发编程篇
  4. 【c++面向对象编程】工资管理系统
  5. CentOS 编译Hadoop 2.6 32位
  6. Web前端之移动端课程开发之06.bootstrap
  7. 如何使用 SpringCloud 搭建服务注册中心?
  8. [物理学与PDEs]第2章第4节 激波 4.2 熵条件
  9. R语言ETL工程系列:检索(select)
  10. android mms 广播,Android-如何成为第一个接收WAP PUSH(MMS)的人
  11. zend studio12配置php,Zend Studio 12.0调试php代码
  12. 遇到电脑中病毒了怎么办
  13. python神奇的小海龟_Python绘图——认识turtle小海龟
  14. 小学数学题的Java实现
  15. 史上最详细的WinHex数据恢复大师(六大章节)视频教程
  16. JAVA线程 -- 线程状态
  17. gt710显卡驱动linux,华硕 GT710-SL-2G驱动下载_asus GT710-SL-2G显卡驱动下载-硬件之家...
  18. SoLoMo:移动互联网创新的“三维模式”分析
  19. 配置apache和nginx的tomcat负载均衡
  20. DSP2837d双核调试

热门文章

  1. Linux按照行数、大小切分文件
  2. 考研数学自整理,弥补知识漏洞(强化、冲刺)
  3. 计算机英语词汇论文,【计算机英语论文】计算机英语词汇教育思索(共2137字)
  4. php微信40037,服务号发送模板消息问题,错误码:40037
  5. 安卓的短信记录导入苹果_安卓换苹果手机如何进行便签数据转移?
  6. centos6.5 nginx1.8 php mysql,CentOS6.5 源码安装Nginx1.8 + PHP7.0.6 + MySQL5.7.12
  7. 用计算机听音乐和看电影的ppt,五年级下册信息技术课件-第六课 用计算机听音乐和看电影 川教版 (共13张PPT)...
  8. kubernetes ConfigMap和Secret:配置应用程序
  9. 48.孩子们的游戏(圆圈中最后剩下的数)
  10. Python学习之路—初识Python