• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Thinkphp5整合结巴分词实现网站模糊搜索

Thinkphp5整合结巴分词实现网站模糊搜索

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了Thinkphp5整合结巴分词,网站模糊搜索,PHP中文分词模块,jieba分词等相关知识,希望对您有所帮助

最近在升级站长图库网站的时候,将一直苦恼的网站搜索功能一并升级了一下,原来是关键词精准搜索,也就是用户输入关键词,通过 like 模糊查询匹配出内容。

但是这样有一个大问题:就是用户输入的关键词(其实很多时候用户输入的都是比较长的一句话,或者类似百度等搜索引擎习惯的空格分割的关键词)这样的话,基本是很难匹配到网站内容数据的,除非单个比较短的关键词才会有。

之前一直想做一下分词搜索,看了很多接口,也试过挺多的方法,都不太理想;最近花了点时间研究了一下,觉得“结巴分词”是目前比较好的一个解决方案,好了废话不多说,看实操~~


Thinkphp5整合结巴分词实现网站模糊搜索


关于结巴分词

“结巴”中文分词:做最好的PHP中文分词,中文断词组件。/“结巴”(中文为“口吃”)中文分词:建立最好的PHP中文分词模块。

目前翻译版为jieba-0.33版本,未来再慢慢往上升级,效能也需要再改善,请有兴趣的开发者一起加入开发!若想使用Python版本请前往 https://github.com/fxsjy/jieba

现在已经可以支援繁体中文!只要将字典切换为大模式即可!


结巴分词特征

支持三种分词模式:

1)默认精确模式,试图将句子最精确地切开,适合文本分析;

2)全模式,把句子中所有的可以成词的词语都扫描出来,但是不能解决歧义。(需要充足的字典)

搜寻引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜寻引擎分词。

支持繁体断词

支持自定义词典


结巴分词的介绍就到这里,具体更多的介绍去 https://github.com/fukuball/jieba-php 这里看吧!(Gitee地址:  https://gitee.com/RandolfJay/jieba-php)


thinkphp5的整合结巴分词:

首先:通过 composer 安装结巴分词模块

composer require fukuball/jieba-php:dev-master

然后就不用管了,直接写控制器:

<?phpnamespace app\index\controller;// 必须有,且内存不小于1024Mini_set('memory_limit', '1024M');use think\Controller;// 结巴分词PHP模块use Fukuball\Jieba\Jieba;  //必须use Fukuball\Jieba\Finalseg;use Fukuball\Jieba\JiebaAnalyse;   //关键词提取Jieba::init(); //必须Finalseg::init();JiebaAnalyse::init();class Search extends Controller{    public function index()    {        $keyword = urldecode(input('keyword/s'));        if (!empty($keyword)) {            // 使用关键词提取,返回 5 个 TF/IDF 权重最大的关键词,默认为 20 个            $fenci =  JiebaAnalyse::extractTags($keyword, 5);            $keywords_fenci = [];            foreach ($fenci as $key => $value) {                // 将关键词组合为 Like 所需格式的数组                $keywords_fenci[] = '%' . $key. '%';            }            // 搜索标题和简介字段            $where['title|description'] = array('like', $keywords_fenci);            $list = db('Article')->where($where)->select();        } else {            // 空白搜索页            $this->error('关键词为空!');        }        return $this->fetch('');    }}

以上是核心代码,其他部分大家根据自己的业务拓展~~

这样便实现了牧户搜索功能,如果还想让前台将提取的关键词标红(就像本站这样)可以是用以下方法:

/** * [关键词标红] * @param  [type] $info       [内容] * @param  [type] $search_arr [关键词数组] * @return [type]             [description] */function keyword_red($info, $search_arr){    foreach ($search_arr as &$value) {        $info = str_ireplace($value, '<span>' . $value . '</span>', $info);    }    return $info;}

将其作用在前台搜索结果页的 title 和 description 字段上,再将<span></span>标签字体颜色变红即可。


是不是很简单,其实结巴分词还有很多种用法,具体大家可以去看看文档,写的都很完整,不过目前PHP版的结巴分词仅提供了 jieba.cut 用于分词,完整的应该是 Python版结巴分词,不过小编不会,也就没有深究了,够用就好,你觉得呢~~


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Thinkphp5整合结巴分词实现网站模糊搜索

相关文章

  • 解决mysql报错This function has none of DETERMINISTIC问题
  • 你知道PHP中重定向网页跳转页面的方法有哪些吗?一起说说吧
  • 趣味讲解Node.js中的回调函数(附示例)
  • 详解Laravel前端工程化之mix
  • 你知道Thinkphp5.1让验证码在Electron-vue中怎么用?
  • 安装apache后如何添加代理模块
  • 超酷的CSS3 loading预加载动画特效
  • 修改织梦cms标签TAG不限制长度
  • zblog php 忘记密码怎么办
  • javascript在php中文乱码怎么办

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Photoshop制作华丽的金色霓虹灯字
    • 如何使用PhpSpreadsheet导入导出Excel
    • 7B2主题美化之右上角投稿美化+加上搜索
    • PS制作质感的立体字
    • WordPress后台出现多篇英文文章
    • thinkphp增加每页显示条数的方法
    • PHP中的__callStatic函数如何使用
    • “内容”优化影响排名 “内容”提升用户体验
    • 将phpcms默认ckeditor编辑器换成KindEditor
    • 安装apache后如何添加代理模块

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有