背景

在packgist.orgcomposer组件库中有很多针对laravel框架的组件,它给我们提供了ServiceProvider文件,我们使用起来会非常方便。

但是组件库中大部分不是为Laravel开发的组件,这时使用起来其实也很方便。下载完毕后,直接利用命名空间使用即可。但为了符合Laravel的开发模式,我们可以将其注册为服务提供者,笔者经历一番测试之后,终于成功了,特此发一篇教程给大家。

举例

Paste_Image.png

Paste_Image.png

那么就以结巴分词为例,开始注册服务提供者

打开组件网站,按提示使用composer安装,笔者不再赘述。安装完之后就是这样的效果,如下图:

Paste_Image.png

首先看一下功能和结构

功能分析:

功能 1):分词

功能 2):添加自定义词典

功能 3):关键词提取

功能 4):词性分词

功能 5):切换繁体字典

具体演示代码,不做举例,网站上写的很清晰。

结构分析:

使用到的四个主要的类和两个辅助的工具类,其它文件为辅助分词的词典。

Fukuball\Jieba\Jieba 分词类

Fukuball\Jieba\Finalseg 必须依赖类

Fukuball\Jieba\JiebaAnalyse 可选词性类

Fukuball\Jieba\Posseg 可选词频类

分词的三种模式,默认精确模式、全模式、搜索引擎模式。

封装一个集合类

因为分词会用到多个类,如果不进行合并的话,这意味我们要注册多个类,这很麻烦。那我们可以做一个集成类,将所有需要的功能和依赖集合于其中。就像下面这样:

# Bootstrap.php

namespace Fukuball\Jieba;

ini_set('memory_limit', '1024M');

require_once __DIR__."/vendor/multi-array/MultiArray.php";

require_once __DIR__."/vendor/multi-array/Factory/MultiArrayFactory.php";

require_once __DIR__."/class/Jieba.php";

require_once __DIR__."/class/Finalseg.php";

require_once __DIR__."/class/JiebaAnalyse.php";

require_once __DIR__."/class/Posseg.php";

use Fukuball\Jieba\Jieba as Jieba;

use Fukuball\Jieba\Finalseg as Finalseg;

use Fukuball\Jieba\JiebaAnalyse as JiebaAnalyse;

use Fukuball\Jieba\Posseg as Posseg;

// 集成类

class Bootstrap

{

public $jieba;

public $finalseg;

public $jiebaAnalyse;

public $posseg;

public $dic; // Array 分词使用词典(大中小三种)

public $user_dic; // Path 用户自定义词典

public function __construct($option){ // 可以加一些配置参数

//实例化

$this->jieba = new Jieba();

$this->finalseg = new Finalseg();

$this->jiebaAnalyse = new JiebaAnalyse();

$this->posseg = new Posseg();

// 初始化

$this->jieba->init();

$this->finalseg->init();

// $this->jiebaAnalyse->init(); // 词性分析

// $this->posseg->init(); // 词频分析

$this->dictionary = ['dict' => 'small']; // 默认使用小词典

$this->user_dic = dirname(__FILE__).'/dict/user_dict.txt'; // 用户自定义词典

$this->jieba->loadUserDict($this->user_dic); // 载入自定义词典

}

public function jieba(){

return $this->jieba;

}

public function finalseg(){

return $this->finalseg;

}

public function jiebaAnalyse(){

return $this->jiebaAnalyse;

}

public function posseg(){

return $this->posseg;

}

}

注意一点,php的内存限制要扩大到1G才可以。

上述代码基本上就是按照给定的例子改写的,只是简单的示例而已,至于细节之处,笔者是刚刚试验出来,还没完善。

创建一个服务提供者

namespace Fukuball\Jieba;

use Illuminate\Support\ServiceProvider;

class JiebaServiceProvider extends ServiceProvider

{

/**

* Bootstrap any application services.

*

* @return void

*/

public function boot()

{

//

}

/**

* Register any application services.

*

* @return void

*/

public function register()

{

$this->app->singleton(\Fukuball\Jieba\Bootstrap::class, \Fukuball\Jieba\Bootstrap::class);

}

}

复制一个,然后按照葫芦画瓢。

singleton方法是注册一个单例Bootstrap的类。

注册服务提供者

打开congif\app.php。

// 注册服务提供者

'providers' => [

Fukuball\Jieba\JiebaServiceProvider::class,

]

// 给使用类添加别名

'aliases' => [

'JiebaTest' => Fukuball\Jieba\Bootstrap::class,

]

测试

添加路由,进行测试

Paste_Image.png

问题1 关于random的一些东西找不到

paragonie/random_compat/lib/random.php

结巴分词的依赖问题,composer install 即可。

问题2 服务提供者无法找到

这个类找不到。

Class "JiebaServiceProvider" is not Found.

最终测试结果,问题出子composer.json之中,composer.json之中autoload自动加载无法将命名空间解析到指定的文件路径之中。其默认autoload是这样的:

Paste_Image.png

发现这里面仅自动加载了默认的文件的路径,而新添加的文件未被解析。这时,我们要对其进行修改,让其解析命名空间是与路径对应起来。

你可能会修改成这样:

Paste_Image.png

但很遗憾,这样做没起作用(笔者也很纳闷,按理说这样是可以的,如果你测试成功了可以告诉我)。

但笔者退而求其次,又找了另一种解决方案。

在Laravel中的composer.json的autoload中,有多种加载方式,其最终会是加载的是autoload_real.php文件,但很可惜,这是一个自动生成的文件,我们更改后会出现一些问题。

这时,笔者又找到了installed.json文件,该文件是composer安装组件的所有配置文件,经笔者测试,修改后是可行的。如下图所示:

Paste_Image.png

找到结巴分词的autoload位置,进行如下修改:

Paste_Image.png

注意:末尾的标点符号要干掉,否则会解析错误。

提醒:修改完毕后,要使用composer dump-autoload重新生成autoload文件

然后我们打开autoload_psr4.php看一下,发现Fukuball命名空间能够与文件路径对应了。

Paste_Image.png

最后我们在进行一下测试

Paste_Image.png

php 结巴分词,将开源PHP组件注册为服务提供者,以结巴分词为例相关推荐

  1. 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 汉语分词领域主要分词算法、组件、服务(上)...

    目录 0.内容梗概 1. 基于传统统计算法的分词组件 1.1 hanlp : Han Language Processing 1.2 语言技术平台(Language Technology Platfo ...

  2. 《自然语言处理实战入门》 第三章 :中文分词原理及相关组件简介 ---- 语言学与分词技术简介

    文章大纲 0.内容梗概 1. 汉语语言学简介 1.1 汉语与汉字的起源 1.2 汉字的统一与演变 1.3 印欧语系与汉藏语系 1.4 语言区别对于NLP 的影响 2. 词汇与分词技术简介 2.1 汉语 ...

  3. 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 语言学与分词技术简介...

    <自然语言处理实战入门> ---- 第4课 :中文分词原理及相关组件简介 之 语言学与分词技术简介 https://edu.csdn.net/course/play/20769/25954 ...

  4. 采访IK Analyzer 中文分词器开源项目作者林良益(十三)

    转自: http://www.iteye.com/magazines/43-ik-analyzer 众所周知,全文搜索几乎已经成为每个网站的必须提供的基本功能之一,用Lucene构造一个"索 ...

  5. 爱奇艺开源的组件化跨进程通信解决方案

    /   今日科技快讯   / 近日,特斯拉首席执行官埃隆·马斯克来到中国上海,亲自向客户交付中国制造的Model 3,并透露了有关Model Y的更多信息,特斯拉股价继续保持着近三个月来的飙涨势头,目 ...

  6. antd vue form 手动校验_Vue 开发者不可错过的五款开源扩展组件

    自 2014 年正式对外发布以来,Vue 凭借着入门容易.资料丰富.框架功能完善等优势,成为国内许多前端开发者在众多 JavaScript 框架中的首选.Gitee 上这些优秀的开源 Vue 组件也侧 ...

  7. 组件命名方式||局部组件注册:局部组件只能在注册他的父组件中使用

    组件命名方式 组件注册注意事项                 如果使用驼峰式命名组件,那么在使用组件的时候,只能在字符串模板中用驼峰的方式使用组件,但是                 在普通的标签 ...

  8. 组件化开发思想||全局组件注册语法||组件注册注意事项

    组件化开发思想 编程中的组件化思想体现 组件化规范: Web Components 全局组件注册语法 <!DOCTYPE html> <html lang="en" ...

  9. COM+组件注册方法

    有两种方式注册组件:一种是调用regsvr32.exe:例如我们运行regsvr32.exe c:\test.dll来注册位于C:盘根目录下的test.dll.另外一种是在MTS(微软事务服务器)中注 ...

  10. spring系列-注解驱动原理及源码-bean组件注册

    目录 一.环境初始化 1.环境准备 二.bean的手动注入 1.xml方式注入bean 2.使用@Configuration&@Bean方式注入bean 三.自动扫描注册组件及bean 1.使 ...

最新文章

  1. 13Flyweight(享元)模式
  2. 【数字孪生】工业互联网和数字孪生
  3. 学python好不好-Python就业前景好不好?学Python好找工作吗?
  4. Spring Cloud微服务系列文,服务调用框架Feign
  5. 前端学习(2342):react的生命周期
  6. 二分法查找 - python实现
  7. linux修改默认python版本_将Linux下python默认版本切换成替代版本
  8. FusionInsight MRS:你的大数据“管家”
  9. 开课吧Java课堂:特殊的字符串如何操作,字符串如何连接
  10. python之pyc
  11. mysql sleep进程 java_请教java更新mysql,更新进程sleep
  12. NEFU 大一寒假训练六(二分查找)2020.01.05
  13. 图像处理——插值算法
  14. 内网通过计算机名查询IP地址
  15. C语言练习,指针变量作函数参数,从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10
  16. 1人民币试用世纪互联azure虚拟机,跑CNN训练
  17. 十一黄金周旅游线路排行榜(图文)
  18. 哔哩哔哩自动播放视频
  19. 基于FPGA的数字时钟设计
  20. DellR720服务器上安装EXSI6.5.0全教程

热门文章

  1. 飞凌课堂丨揭开影响RS485通讯因素的面纱
  2. Zigbee 协议栈
  3. Greenplum 实时数据仓库实践(5)——实时数据同步
  4. 来自Intouch小菜鸟的第一篇Blog——报表制作
  5. 常见内网穿透工具使用总结
  6. 图论及其应用 2007年期末考试答案 总结
  7. 电子科技大学《图论及其应用》复习(史上最全汇总)
  8. 联想服务器改win7系统教程,联想台式机10代cpu改win7系统详细教程
  9. 思科网络模拟器Packet Tracer教程
  10. [RubyOnRails]一些网址