<?php
/**
* @author: xiaojiang 2014-01-08
* php 建立分词树
* */
class Tree{ public $w = '';
public $subT = array();
public $isEnd = false; public function __construct($w= '' , $isEnd = false){
if(!empty($w)){
$this->w = $w;
$this->isEnd = $isEnd;
}
}
public function insert( $str ){ $len = strlen($str);
if(!$len) return ;
$scope = $this;
for( $i = 0; $i< $len; $i++ ){
//判断汉字
$cStr = $str[$i];
if( ord( $cStr ) > 127 ){
$cStr = substr($str, $i, 3);
$i += 2;
}
$scope = $scope->insertNode( $cStr );
}
$scope->isEnd = true;
} private function &insertNode( $w ){
$t = $this->hasTree( $w );
if( !$t ){
$t = new Tree( $w );
array_push($this->subT, $t );
}
return $t;
} public function &hasTree($w){
foreach ($this->subT as $t){
if($t->w == $w)
return $t;
}
return false;
} } class myStr{ private $str = '';
private $arr = array();
private $len = 0;
public function __construct( $str){
$this->str = $str;
$len = strlen($str);
for ($i = 0; $i < $len; $i++ ){
$cStr = $str[$i];
if(ord($cStr) > 127){
$cStr = substr($str, $i , 3);
$i += 2;
}
array_push($this->arr, $cStr);
}
$this->len = count($this->arr);
} public function getIndex( $idx ){
return $this->arr[$idx];
} public function getLength(){
return $this->len;
}
} $tIns = new Tree();
$tIns->insert('中华');
$tIns->insert('人民');
$tIns->insert('共和国');
$tIns->insert('baidu'); $strIns = new myStr("cc中华的人民共和国和中国啊啊www.baidua.com"); for ($i = 0; $i < $strIns->getLength(); $i++ ){ $j = $i;
$curW = $strIns->getIndex($i);
$stIns = $tIns->hasTree( $curW );
if(!$stIns) continue; $sw = '';
while ( $stIns ){
$sw .= $stIns->w;
$_isEnd = $stIns->isEnd;
$stIns = $stIns->hasTree( $strIns->getIndex( ++$j ) );
if( !$stIns && !$_isEnd)
$sw = '';
}
if($sw)
echo $sw."<br>";
} ?>

输出:

中华
人民
共和国
baidu

PHP 搜索分词实现代码的更多相关文章

  1. 代码 | 自适应大邻域搜索系列之(7) - 局部搜索LocalSearch的代码解析

    前言 好了小伙伴们我们又见面了,咳咳没错还是我.不知道你萌接连被这么多篇代码文章刷屏是什么感受,不过,酸爽归酸爽.今天咱们依然讲代码哈~不过今天讲的依然很简单,关于局部搜索LocalSearch的代码 ...

  2. phpcms搜索给分页代码添加参数方法

    在使用PHPCMS开发网站时遇到了一个搜索功能,需要在搜索结果分页链接上添加一些传递的参数,不然不能够正确翻页. 方法: 找到\phpcms\libs\functions\global.func.ph ...

  3. jQuery带tab切换搜索框样式代码

    效果体验:http://hovertree.com/texiao/jquery/23/ 代码如下,保存到HTML文件也可以查看效果: <!DOCTYPE html> <html la ...

  4. solr搜索分词优化

    solr服务器配置好在搜索时经常会搜出无关内容,把不该分的词给分了,导致客户找不到自己需要的内容,那么我们就从配置词典入手解决这个问题. 首先需要知道自带的词典含义: 停止词:停止词是无功能意义的词, ...

  5. js 获取百度搜索关键词的代码

    有可能有时候我们会用到在百度搜什么关键词进来我们的网站的,所有我们又想拿到用户搜索的关键词. 这是我研究了半天所得出的办法.话不多说直接贴代码 <script> function quer ...

  6. bootstrap搜索框样式代码及效果

    <div class="container"> <div class="input-group"> <input type=&qu ...

  7. 总结oninput、onchange与onpropertychange事件的用法和区别 书写搜索的神奇代码

    总结oninput.onchange与onpropertychange事件的用法和区别 最近手机开发一个模糊搜索的功能组建,在网上就找到这篇文章! 前端页面开发的很多情况下都需要实时监听文本框输入,比 ...

  8. php 建立 搜索 分词树

    <?php /** * @author: xiaojiang 20140107 * php 建立分词树 * */ class Tree{ public $w = ''; public $subT ...

  9. 深入浅出SharePoint2007——定制搜索之无代码篇

    需求: 输入值,如果多行文本列包含此搜索关键字,显示对应的查询结果. 解决方案: 使用Form Web Part和Data form web part. 1 创建list,并创建3列 选中默认的lis ...

随机推荐

  1. (原)从mp4,flv文件中解析出h264和aac,送解码器解码失败

    转载请注明出处:http://www.cnblogs.com/lihaiping/p/5285166.html 今天在做本地文件解码测试,发现从mp4,flv文件中读出来的帧数据,h264和aac帧直 ...

  2. Java线程创建的两种方式

    java多线程总结一:线程的两种创建方式及优劣比较 (一)---之创建线程的两种方式 java实现多线程的两种方法的比较

  3. HttpClient后台post 请求webapi

    1.请求方法 /// <summary> /// httpClient 请求接口 /// </summary> /// <param name="url&quo ...

  4. [原创]RX801SJ 实时时钟RTC调试纪要 : 时钟输出设置

    利用USB转I2C/SPI/UART板进行通信测试 1.RX8010SJ的I2C通信地址定义如下: 设备读取地址:0X65 设备写入地址:0X64   2.USB2ish0转接板操作界面如下: 3.参 ...

  5. Druid搭配log4j2输出SQL语句和结果

    一.引言 其实Druid的内置了log4jdbc来显示SQL语句,虽然显示效果不如原生的log4jdbc效果好,但是因为内置所以不需要其他更多的配置. 二.使用 1. 创建基于druid的logger ...

  6. Git 基础 - 远程仓库的使用

    远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库.远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写.同他人协作开发某个项目时,需要管 ...

  7. 解决错误:“废弃 document 元素之后的内容”——HTML5新特性,局部样式表

    最近正在学习angularjs,不过本文和angularjs没多大关系.在学习使用route和ng-view使用模版之后,发现view装载之后,firefox都会报个错误“废弃 document 元素 ...

  8. 2015-10-07:几乎100%肯定:百度网盘在夜间的时段是不限速的:早晨7点前很轻松达到3M/S,7点后就降低到1M/S了,白天才400K/S左右

    最近发现(2015-10-07)几乎100%肯定:百度网盘在夜间的时段是不限速的:早晨7点前很轻松达到3M/S,7点后就降低到1M/S了,白天才400K/S左右

  9. linux环境中如何删除文件的前n行?

    需求描述: 今天看了一个系统的临时文件,有5.6G的大小,这个文件也没有用了,想要将大部分的文件都删除掉. 在此记录下删除的过程.删除前n行的记录. 操作过程: 对于数据量比较大的情况(本例5800万 ...

  10. Owe Her

    I owe her too much a wedding, i think i never pay her for it a life,