刚写的个PHP拼音分词的东西~
Post by
yaohuaq
  2011-06-23 21:06:44 Thursday Tags:PHP,拼音,分词

最大正向匹配算法,

PHP代码
  1. <?php  
  2. /** 
  3.  * @PHP 拼音分词 
  4.  * @author: c77cc 
  5.  */  
  6. class PinyinSplit   
  7. {  
  8.     //声母表  
  9.     private $sms = array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','w','x','y','z','sh','zh','ch');  
  10.     //韵母表  
  11.     private $yms = array('a','e','i','o','u','v','ai','au','ao','ei','er','ou','ue','ua','an','en','in','un','ie','uv','uo','ui','iu','ia','ang','ing','ong','eng','uan','uai','ian','iao','uang','ueng','iong','iang');  
  12.   
  13.     private $result = '';  
  14.   
  15.     public function __construct($string)   
  16.     {  
  17.         $string = preg_replace('/[^a-z]/i'''$string);  
  18.         $this->result = substr($this->findsm($string), 0, -1);  
  19.     }  
  20.   
  21.     public function get()   
  22.     {  
  23.         return $this->result;  
  24.     }  
  25.   
  26.     public function findsm($string$result = '')   
  27.     {  
  28.         $find_len   = 0;  
  29.         $str_len    = strlen($string);  
  30.   
  31.         foreach($this->sms as $sm) {  
  32.             for($i=0;$i<=$str_len;$i++) {  
  33.                 if($sm == substr($string, 0 ,$i+1)) {  
  34.                     $find_len = strlen($sm);  
  35.                 }  
  36.             }  
  37.         }  
  38.   
  39.         if($find_len != 0) {  
  40.             $result .= substr($string, 0 ,$find_len);  
  41.             $str_last = substr($string$find_len);  
  42.         }else {  
  43.             $result = $this->findym($string$result);  
  44.         }  
  45.   
  46.         if(isset($str_last) && strlen($str_last) > 0) {  
  47.             $result = $this->findym($str_last$result);  
  48.         }  
  49.       
  50.         return $result;  
  51.     }  
  52.   
  53.     public function findym($string$result = '')   
  54.     {  
  55.         $find_len   = 0;  
  56.         $str_len    = strlen($string);  
  57.   
  58.         foreach($this->yms as $ym) {  
  59.             for($i=0;$i<=$str_len;$i++) {  
  60.                 if($ym == substr($string, 0, $i+1)) {  
  61.                     $find_len = strlen($ym);  
  62.                 }  
  63.             }  
  64.         }  
  65.   
  66.         if($find_len != 0) {  
  67.             $result .= substr($string, 0, $find_len);  
  68.             $result .= ' ';  
  69.             $str_last = substr($string$find_len);  
  70.         }else {  
  71.             $result = $this->findsm($string$result);  
  72.         }  
  73.   
  74.         if(isset($str_last) && strlen($str_last) > 0) {  
  75.             $result = $this->findsm($str_last$result);  
  76.         }  
  77.   
  78.         return $result;  
  79.     }  
  80.   
  81. }  
  82.   
  83. if(isset($argc) && $argc > 1) {  
  84.     $string = $argv[1];  
  85. }else {  
  86.     $string = isset($_GET['string']) ? $_GET['string'] : '';  
  87. }  
  88.   
  89.   
  90. $p = new PinyinSplit($string);  
  91. $rs = $p->get();  
  92. echo $rs."\n\n";  
  93. ?>  

 

发表评论:
姓名:
联系方法:(选填)
评论内容:
个人信息
欠X的生活
昵称:c77cc
QQ:
Email:yaohuaq#gmail.com
居住地:北京 海淀
星座:
毕业院校:
工作点:lighthonor.com