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

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

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了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整合结巴分词实现网站模糊搜索

相关文章

  • 2022-04-29vue element el-transfer增加拖拽功能
  • 2022-04-29PHP实现腾讯短网址生成api接口实例
  • 2022-04-29四种方式快速实现上拉触底加载效果
  • 2022-04-29浅谈CSS如何实现九宫格提示超出数量
  • 2022-04-29Photoshop制作卡通风格的3D立体字教程
  • 2022-04-29Photoshop创建简洁绚丽的几何组合背景
  • 2022-04-29dedecms栏目30个关键字限制解决方法
  • 2022-04-29微信小程序反编译提取源代码方法
  • 2022-04-29用Coreldraw做漂亮的动画图片
  • 2022-04-29Dedecms在php7下的一些常见问题

文章分类

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

最近更新的内容

    • 如何修改织梦cms的幻灯片调用为全站调用
    • 如何撰写良好的描述标签 description tag?
    • Photoshop设计绚丽光线效果的心形视频教程
    • DEDECMS让广告延时加载,提高网页打开速度
    • Photoshop制作绚丽的放射光线效果图
    • HTTP 返回状态码汇总
    • 如何解决php md5生成16位出现乱码问题
    • 织梦DEDECMS扩展插件来防止注册机注册会员和投稿
    • 外链的好坏与网站获得很好的排名无关
    • MAC环境配置定时任务

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

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