第一句子大全,网罗天下好句子,好文章尽在本站!

PHP 实现中文分词搜索功能

时间:2009-02-26

例如,英文句子I am a student,用中文则为:我是一个学生

友情提示:本文共有 1061 个字,阅读大概需要 3 分钟。

中文分词介绍

众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一个学生,分词的结果是:我 是 一个 学生。

应用场景

打个比方,我们要搜索内容字段有“中文分词搜索功能”的文章,用 like 去查询的话,可以匹配以下几种:

like "中文分%"like "%中文分词搜索功能%"like "分词搜索功能%"如果输入 “中文搜索功能”,就无法匹配到对应的文章。这时候就得用中文分词搜索功能了,分词搜索的原理就是把内容按关键字给拆分,上面那段可以拆分成 “中文”、“分词”、“搜索”、“功能”,然后把这些关键字和内容关联索引,查询结果。

需安装的扩展

pdo_sqlitesqlite3mbstring拉取中文分词的 Laravel Scout TNTSearch 驱动

composer require vanry/laravel-scout-tntsearch

发布 scout 配置文件,已安装 scout 可省略。

php artisan vendor:publish --provider="LaravelScoutScoutServiceProvider"发布 tntsearch 配置文件。

php artisan vendor:publish --provider="VanryScoutTNTSearchScoutServiceProvider"

添加config/app.php 的 Provider

// TNTSearch 全文搜索LaravelScoutScoutServiceProvider::class,VanryScoutTNTSearchScoutServiceProvider::class,安装结巴分词

jieba 为 python 版本结巴分词的 php 实现,分词效果最好,尤其是新词发现,不足之处是性能较差,占用内存大。

composer require fukuball/jieba-php

.env文件 增加如下配置

SCOUT_DRIVER=tntsearch# jiebaTNTSEARCH_TOKENIZER=jieba修改模型

我们是文章表要用到分词搜索,然后作用于标题和内容字段。

* Date: 2020/07/31 * Time: 10:36 * @return array */publicfunction toSearchableArray(){return["id"=> $this->id,"title"=> $this->title,"content"=> strip_tags($this->content),];}// ...使用 jieba 分词可能会出现内存分配不足的错误信息:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

修改 /app/Providers/AppServiceProvider.php 文件

publicfunction boot(){// ...// 增加内存防止中文分词报错 ini_set("memory_limit","256M");}

生成索引

php artisan scout:import"AppModelsArticle"# tntsearch 命令, 性能更好// php artisan tntsearch:import "AppPost"

本文如果对你有帮助,请点赞收藏《PHP 实现中文分词搜索功能》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
如何在 Electron 上实现 IM SDK 聊天消息全文检索

如何在 Electron 上实现 IM SDK 聊天消息全文检索

...位置的技术。在以往的关系型数据库中,只能通过 LIKE 来实现,这样有几个弊端: 无法使用数据库索引,需要遍历全表,性能较差 搜索效果差,只能首尾位模糊匹配,无法实现复杂的搜索需求 无法得到文档与搜索条件的相关性...

2023-06-30 #经典句子

自然语言理解

自然语言理解

...文本中提取出最为核心、最具有代表性的关键词。常用的实现算法有TF-IDF和TextRank两种,在提取之前需要对给定文本进行中文分词并移除停用词,即例如,“你”“我”“着”“了”等十分常用但不包含具体语义的词。TF-IDF选出...

2023-06-11 #经典句子

Python的8种文本处理工具合集!Python入门

Python的8种文本处理工具合集!Python入门

...工具有哪些吗?我们一起来看看吧。1、Jieba:最好的Python中文分词组件,其功能包含三种分词模式,精确模式、全模式、搜索索引模式,支持繁体分词,支持自定义词典等。2、NLTK:一个构建Python程序以使用人类语言数据的领先平...

2023-08-16 #经典句子

白杨SEO:内容不够怎么办?智能批量生成SEO原创文章工具来助力

白杨SEO:内容不够怎么办?智能批量生成SEO原创文章工具来助力

...可根据网站数据库格式自定义导出格式,文章导出后即可实现一键导入并发布。如果是代理可以直接送《织梦文章批量上传插件》,如果是WP系统,系统后台有批量导入工具。或者有技术的,根据下载格式导入数据库,如果都没...

2012-08-02 #经典句子

3分钟短文|伸手党有福了 PHP也能用上startsWith endsWith 了

3分钟短文|伸手党有福了 PHP也能用上startsWith endsWith 了

...来看看。学习时间我们也先来造个轮子,看看其中一种的实现方法。先实现 startsWith 函数:function startsWith($haystack, $needle){$length = strlen($needle); return (substr($haystack, 0, $length) === $needle); }接着是 endsWith 函数:function endsWith($haystack,...

2013-07-21 #经典句子

创新工场两篇论文入选ACL 2020 将中文分词数据刷至新高

创新工场两篇论文入选ACL 2020 将中文分词数据刷至新高

...个4元组)提供的每个字的构词能力,通过加(降)权重实现特定语境下的歧义消解。并通过非监督方法构建词表,实现对特定领域的未标注文本的利用,进而提升对未登录词的识别。例如,在“部分居民生活水平”这句话中,...

2023-11-28 #经典句子

开发中文分词程序的技术框架

开发中文分词程序的技术框架

...序的技术框架,给出的技术框架也是整个中文分词课程要实现的中文分词程序案例。本文介绍常用分词算法的基本原理,主要是让读者对分词的知识框架有个整体认知。通过本篇的学习,可以达成如下目标。● 了解常用分词算...

2023-11-01 #经典句子

创新工场提出中文分词和词性标注新模型 可提升工业应用效率

创新工场提出中文分词和词性标注新模型 可提升工业应用效率

...个4元组)提供的每个字的构词能力,通过加(降)权重实现特定语境下的歧义消解。并通过非监督方法构建词表,实现对特定领域的未标注文本的利用,进而提升对未登录词的识别。在算法实验中,该模型在5个数据集(MSR、PKU...

2023-08-20 #经典句子