php實現(xiàn)的中文分詞類完整實例
本文實例講述了php實現(xiàn)的中文分詞類。分享給大家供大家參考,具體如下:
該中文分詞類源碼使用http://tools.jb51.net/code/jb51_php_format進(jìn)行了格式化處理,便于閱讀。具體代碼如下:
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; } } ?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php常用函數(shù)與技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
解析使用substr截取UTF-8中文字符串出現(xiàn)亂碼的問題
本篇文章是對使用substr截取UTF-8中文字符串出現(xiàn)亂碼的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP基于迭代實現(xiàn)文件夾復(fù)制、刪除、查看大小等操作的方法
這篇文章主要介紹了PHP基于迭代實現(xiàn)文件夾復(fù)制、刪除、查看大小等操作的方法,簡單說明了迭代的原理并結(jié)合實例形式分析了php采用迭代算法實現(xiàn)文件夾的復(fù)制、刪除及查看大小等常見操作的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-08-08mysql_fetch_assoc和mysql_fetch_row的功能加起來就是mysql_fetch_array
mysql_fetch_assoc和mysql_fetch_row的功能加起來就是mysql_fetch_array...2007-01-01php使用vue實現(xiàn)省市區(qū)三級聯(lián)動
這篇文章主要為大家詳細(xì)介紹了php如何使用vue實現(xiàn)省市區(qū)三級聯(lián)動效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12