<?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, " ") !== FALSE) { 数据挖掘研究院
list ($dict_type, $dict_name) = explode(" ", 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(" ", $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)) . " "; 数据挖掘研究院
}
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("/([!"#$\%&"()*+,-./:;<=>?@[\\]^\_`{|}~ f]+)/", " $1 ", $str_final_tmp); 数据挖掘实验室
$str_final_tmp = preg_replace("/([!"#$\%&"()*+,-./:;<=>?@[\\]^\_`{|}~ f])([!"#$\%&"()*+,-./:;<=>?@[\\]^\_`{|}~ 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
0

