中文
一个用php写的中文分词类
class Segmentation {
var $options = array(' lowercase' => TRUE,
'segment_english' => FALSE);
var $dict_name = '不明';
var $dict_words = array();
function setLowercase($value) {
if ($value) {
$this->options[' lowercase'] = TRUE;
} else {
$this->options['小文字'] = FALSE;
}
TRUE を返します。
}
function setSegmentEnglish($value) {
if ($value) {
$this->options['segment_english'] = TRUE;
} else {
$this->options['segment_english'] = FALSE;
}
TRUE を返します。
}
関数load($dict_file) {
if (!file_exists($dict_file)) {
FALSEを返す;
}
$fp = fopen($dict_file, 'r');
$temp = fgets($fp, 1024);
if ($temp === FALSE) {
戻り値 FALSE;
} else {
if (strpos($temp, "t") !== FALSE) {
list ($dict_type, $dict_name) =explode("t", trim($temp));
} else {
$dict_type =rim($temp);
$dict_name = '不明';
}
$this->dict_name = $dict_name;
if ($dict_type !== 'DICT_WORD_W') {
FALSE を返します。
}
}
while (!feof($fp)) {
$this->dict_words[rtrim(fgets($fp, 32))] = 1;
}
fclose($fp);
TRUE を返します。
}
function getDictName() {
return $this->dict_name;
}
functionセグメントString($str) {
if (count($this->dict_words) === 0) {
戻りFALSE;
}
$lines =explode("n", $str);
return $this->_segmentLines($lines);
}
functionセグメントFile($filename) {
if (count($this->dict_words) === 0) {
戻りFALSE;
}
$lines = file($filename);
return $this->_segmentLines($lines);
}
function _segmentLines($lines) {
$contents_segmented = '';
foreach ($lines として $line) {
$contents_segmented .= $this->_segmentLine(rtrim($line)) 。 「ん」;
}
do {
$contents_segmented = str_replace(' ', ' ', $contents_segmented);
} while (strpos($contents_segmented, ' ') !== FALSE);
$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{$私} 。 $str{$i+1};
$i++;
} else {
$str_tmp = $str{$i};
for ($j=$i+1; $j if (ord($str{$j}) $str_tmp .= $str{$j};
} else {
ブレーク;
}
}
$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("/([!"#$%&'()*+,-./:;<=>?@ [\\]^_`{|}~tf]+)/", " $1 ", $str_final_tmp);
$str_final_tmp = preg_replace("/([!"#$%&'()*+,-. /:;<=>?@[\\]^_`{|}~tf])([!"#$%&'()*+,-./:;<=>?@ [\\]^_`{|}~tf])/", " $1 $2 ", $str_final_tmp);
}
if ($this->options['小文字']) {
$str_ Final_tmp = strto lower( $str_final_tmp); }
$str_final = " $str_final_tmp$str_final";
$pos--;
} else {
$word_found = 0;
$word_array = array(0 => '');
if ($pos $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;
休憩。
}
}
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;
}
}
?>
来源参照:
http://www.phpchina.cn/code/2006/0607/381.html
http://www.xuchao.cn/?play=reply&id=851