温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php如何实现中文分词类

发布时间:2021-06-20 11:57:40 来源:亿速云 阅读:648 作者:小新 栏目:开发技术

小编给大家分享一下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如何实现中文分词类”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI