首页  登陆  注册  博客集  下载频道  网络硬盘  学院论坛  家园
IT学院 网站地图 网站地图
收藏本站 收藏本站
高级搜索 高级搜索
 新闻IT新闻 互联网 微软 黑客新闻 网络网络协议 故障 网络管理 TCP/IP 无线技术 解决方案 黑客技术 漏洞 软件评测 安全资讯
 数据MSsql Oracle Mysql PL/SQL 备份 系统:Linux vista Windows FTP 防火墙 注册表 服务器行情 服务器应用 解决方案 WEB服务器
 墙纸风景壁纸 游戏壁纸 体育壁纸 汽车壁纸 人文壁纸 影视壁纸 广告壁纸 花卉壁纸 节日壁纸 动漫壁纸 明星壁纸 绘画壁纸 月历壁纸
当前位置: > 主页>数据库技术>Mysql>PHP-MySQL>一个用PHP写的中文分词函数
热门文章排行
 
热门文章排行 一个PHP通用分页类
win2003下
做个自己站内搜索引擎
PHP和正则表达式 101
PHP 字符串操作入门教程
用libTemplate实现静态
一段防盗连的PHP代码
轻型数据库SQLite结合PH
PHP中的日期处理
PHP网页优化
精采文章推荐
 
精采文章推荐 ThinkTemplate模板引擎
最新更新文章
 
最新更新文章 RHEL下架设MYSQL集群
PHP实现UBB正则替换最简
ThinkTemplate模板引擎
初学入门 PHP 和 MySQL
PHP/MySQL三日通(8)
PHP/MySQL三日通(7)
PHP/MySQL三日通(6)
PHP/MySQL三日通(5)
PHP/MySQL三日通(4)
PHP/MySQL三日通(3)

一个用PHP写的中文分词函数

编辑:   来源:  日期:2008-02-06   我要投稿      家园

<?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<$str_length; $i++) {
           
if (ord($str{$i}) >= 129) {
               
$str_array[] = $str{$i} . $str{$i+1};
               
$i++;
            }
else {
               
$str_tmp = $str{$i};
               
for ($j=$i+1; $j<$str_length; $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_temp; $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网站漏洞的相关总结  
下一篇:图片直读代码
 关键字:  
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论
 

  责任编辑:IT学院  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。