-
-
/* - * 키워드 매칭 클래스
- * @author ylx
- * @packet mipang
- * 사용예
- * $str = "녹색조개 산란계는 내년에 반데사르를 퍼뜨릴 것이고, 내년에는 루카스 지방군을 퍼뜨릴 것입니다." ;
- * $key = new KeyReplace($str,array("xxxx"=>"sadf","내년 1"=>'http://baidu.com',"내년" => ;'google.com'));
- * echo $key->getResultText();
- * echo $key->getRuntime();
- */
- class KeyReplace
- {
- 개인 $keys = 배열();
- 개인 $text = "";
- 개인 $runtime = 0;
- 개인 $url = true;
- 개인 $stopkeys = 배열() ;
- 비공개 $all = false;
- /**
- * @access public
- * @param string $text는 처리할 기사를 지정합니다.
- * @param array $keys는 사전 구문을 지정합니다. array(key=>url,...) url은 다음과 같습니다. 배열, 배열이면 그 중 하나가 무작위로 교체됩니다
- * @param array $stopkeys는 중지 단어를 지정합니다 array(key,...) 이 안에 있는 단어는 처리되지 않습니다
- * @ param boolean $url true는 링크로의 교체를 나타냅니다. 그렇지 않으면
- 만 교체합니다. * @param boolean $all true는 발견된 모든 단어를 교체한다는 의미이고, 그렇지 않으면 처음으로만 교체한다는 의미입니다.
- */
- 공개 함수 __construct($text='',$keys=array(),$url=true,$stopkeys =array (),$all=false) {
- $this->keys = $keys;
- $this->text = $text;
- $this->url = $url; > $this->stopkeys = $stopkeys;
- $this->all = $all;
- }
/**
- * 처리된 기사 가져오기
- * @access public
- * @return 문자열 텍스트
- */
- 공개 함수 getResultText() {
- $start = microtime(true);
- $keys = $this->hits_keys();
$keys_tmp = array_keys( $keys);
function cmp($a, $b){
- if (mb_strlen($a) == mb_strlen($b)) {
- return 0 ;
- }
- return (mb_strlen($a) < mb_strlen($b)) ? 1 : -1;
- }
"cmp");
foreach($keys_tmp as $key){
if(is_array($keys[$key] )) {
- $url = $keys[$key][rand(0,count($keys[$key])-1)];
- }else
- $url = $keys[$key ];
$this->text = $this->r_s($this->text,$key,$url);
- < p> }
- $this->runtime = microtime(true)-$start;
return $this->text;
- }
- /* *
- * 처리 시간 가져오기
- * @access public
- * @return float
- */
- 공개 함수 getRuntime() {
return $this->runtime;
/p>
/**
- * 키워드 설정
- * @access public
- * @param array $keys array(key=>url,...)
- */
- 공개 함수 setKeys($keys) {
$this->keys = $keys ;
}
- /**
- * 중지 단어 설정
- * @access public
- * @param array $keys array(key,...)
- */
- 공개 함수 setStopKeys($keys) {
->stopkeys;
}
- /**
- * 기사 설정
- * @access public
- * @param string $text
- */
- 공개 함수 setText($text)
$this->text = $text;
}
/**
- * 문자열에서 히트 키워드를 찾는 데 사용됩니다.
- * @access public
- * @return array $keys 일치하는 단어 배열을 반환합니다(key=>url,...)
- */
- 공개 함수 hit_keys(){
- $ar = $this->keys;
- $ar = $ar?$ar:array();
- $result=array();
- $ str = $this->text;
- foreach($ar as $k=>$url){
- $k = Trim($k);
- if(!$k)
- 계속;
- if(strpos($str,$k)!==false && !in_array($k,$this->stopkeys)){
- $result[$k] = $url; > }
- }
- return $result?$result:array();
- }
/**
- * 문자열에서 히트 중지 단어를 찾는 데 사용됩니다.
- * @access public
- * @return array $keys 일치하는 단어 배열(key,...)을 반환합니다.
- */
- 공개 함수 hit_stop_keys(){
- $ar = $this->stopkeys;
- $ar = $ar?$ar:array();
- $ result=array();
- $str = $this->text;
- foreach($ar as $k){
- $k = Trim($k);
- if(!$ k)
- 계속;
- if(strpos($str,$k)!==false && in_array($k,$this->stopkeys)){
- $result[] = $k;
- }
- }
- return $result?$result:array();
- }
/**
- * 교체 프로세스 처리
- * @access private
- * @param string $text 교체된 사람
- * @param string $key 키워드
- * @param string $url link
- * @return string $text 처리된 기사
- */
- 비공개 함수 r_s($text,$key,$url){
$tmp = $text;
$stop_keys = $this->hits_stop_keys();
$stopkeys = $tags = $a = array();
- if(preg_match_all("#] >[^<]*]*> #su",$tmp,$m)){
- $a=$m[0];
foreach($m[0] as $k=>$z){
- $z = preg_replace("###s","#",$z);
- < p> $tmp = preg_replace('#'.$z.'#s',"[_a".$k."_]",$tmp,1);
- }
- < p> };
if(preg_match_all("#<[^>] >#s",$tmp,$m)){
- $tags = $m[0];
- foreach($m[0] as $k=>$z){
- $z = preg_replace("###s","#",$z);
- $tmp = preg_replace('#'.$z.'#s ',"[_tag".$k."_]",$tmp,1);
- }
- }
- if(!empty($stop_keys)){
- if(preg_match_all(" #".implode("|",$stop_keys)."#s",$tmp,$m)){
- $stopkeys = $m[0];
- foreach($m[0] as $ k=>$z){
- $z = preg_replace("###s","#",$z);
- $tmp = preg_replace('#'.$z.'#s' ,"[_s".$k."_]",$tmp,1);
- }
- }
- }
- $key1 = preg_replace("#([#()[]* ])#s","\\$1",$key);
if($this->url)
- $tmp = preg_replace("#(?![_s|[_a|[_|[_t|[_ta|[_tag)".$key1."(?!agd _]|gd _]|d _]|sd _]|_])#us",''.$key.'' ,$tmp,$this->all?-1:1);
- else
- $tmp = preg_replace("#(?![_s|[_a|[_|[_t|[_ta|[ _tag)".$key1."(?!agd _]|gd _]|d _]|sd _]|_])#us",$url,$tmp,$this->all?-1: 1);
if(!empty($a)){
foreach($a $n=>$at){
$tmp = str_replace("[_a".$n."_]",$at,$tmp);
}
}
- if(!empty($tags)){
foreach($태그는 $n=>$at){
$tmp = str_replace("[_tag".$n."_]",$at,$tmp);
}
}
- if(!empty($stopkeys)){
foreach($stopkeys as $n=>$at){
$tmp = str_replace("[_s".$n."_]",$at,$tmp);
}
}
- $tmp; 반환
- }
- }
-
复代码
|