使用织梦开源的分词算法库编写的YII获取分词扩展
在编辑文章中,很多时候都需要自动根据文章内容获取关键字的功能,因此,本文主要是说明如何在yii中使用织梦开源的分词算法编写一个独立的扩展,可以在不同的模块中使用,步骤如下:
1 到这里下载其他朋友整理的织梦分词算法库;
2 解压下载的分词库并放到yii extensions/fenci目录下面;
3 在extensions/fenci添加FenciConnectorAction.php和GetTagsInput.php;
4 在对应的module中添加ConnectorController.php,用于实现在类中调用外部action,即是用于调用extensions/fenci中的FenciConnectorAction.php;
下面说明如何编写需要添加的文件的代码:
1 FenciConnectorAction.php 提供给需要调用的模块调用的外部action,用于根据内容获取分词
<?php
class FenciConnectorAction extends CAction
{
public $contents = ''; public function run(){ require_once(dirname(__FILE__) . '/SplitWord.class.php'); $cfg_soft_lang='utf-8';
$sp = new SplitWord($cfg_soft_lang, $cfg_soft_lang);
$sp->SetSource($this->contents, $cfg_soft_lang, $cfg_soft_lang);
$sp->SetResultType(3);
$sp->StartAnalysis(TRUE);
$keywords = $sp->GetFinallyResult(' ');
$keywords = preg_replace("/[ ]{1,}/", ",", trim($keywords));
echo $keywords;
}
}
?>
2 GetTagsInput.php 用于在form表单中调用自动生成表单元素和绑定ajax调用分词action的js
<?php class GetTagsInput extends CInputWidget
{
public $url = '';
public $connectorRoute = false;
public $contentAttribute = ''; public function init()
{
if (empty($this->connectorRoute))
throw new CException('$connectorRoute must be set!'); $this->url = Yii::app()->createUrl($this->connectorRoute); } public function run()
{
list($name, $id) = $this->resolveNameID();
if (isset($this->htmlOptions['id']))
$id = $this->htmlOptions['id'];
else
$this->htmlOptions['id'] = $id;
if (isset($this->htmlOptions['name']))
$name = $this->htmlOptions['name'];
else
$this->htmlOptions['name'] = $name; $contHtmlOptions = $this->htmlOptions;
$contHtmlOptions['id'] = $id . 'container';
echo CHtml::openTag('div', $contHtmlOptions); $inputOptions = array('id' => $id, 'style' => 'float:left;', 'size' => '80');
if ($this->hasModel())
echo CHtml::activeTextField($this->model, $this->attribute, $inputOptions);
else
echo CHtml::textField($name, $this->value, $inputOptions); echo CHtml::button('自动获取', array('id' => $id . 'autoGenerate', 'class' => 'btn'));
echo CHtml::closeTag('div'); $content_id = $this->model->getModelClass().'_'.$this->contentAttribute;
$object_id = $this->model->getModelClass().'_'.$this->attribute;
$script = <<<EOD
window.autoGetTags = function(){
var content_id = '$content_id';
var object_id = '$object_id'; $.ajax({
url: '$this->url',
type:'post',
cache:false,
data:{
contents : $("#"+content_id).val()
},
success: function(datas, textStatus, xhr){
$("#"+object_id).val(datas)
}
});
}
EOD; $cs = Yii::app()->getClientScript();
$cs->registerScript('GetTagsInput#global', $script);
$js = '$("#' . $id . 'autoGenerate").click(function(){window.autoGetTags()});';
$cs->registerScript('GetTagsInput#' . $id, $js);
}
}
?>
3 ConnectorController.php 用于实现外部调用扩展中的FenciConnectorAction.php
<?php
class ConnectorController extends CController
{
public function actions()
{
return array( 'fenci' => array(
'class' => 'ext.fenci.FenciConnectorAction',
'contents' => isset($_POST['contents'])?$_POST['contents']:''
)
);
}
}
?>
4 最终在表单中的调用方式:
<tr>
<td width="150"><?php echo $form->labelEx($model,'tags'); ?></td>
<td>
<?php
$this->widget('ext.fenci.GetTagsInput', array(
'model' => $model,
'attribute' => 'tags',//分词对应的字段
'contentAttribute' => 'title',//指定从哪个字段值获取分词
'connectorRoute' => 'admin/connector/fenci',//设置调用外部action 即是扩展获取分词的action
));
?>
</td>
</tr>
5 效果图:

分词扩展的目录结构如下:

点击自动获取之后就可以自动根据绑定的关键字数据源得到最终的分词结果并显示在目标字段上面,不过这里对于返回的非词语需要再处理一下。
这里附上如何在yii的controller中调用外部action的说明供作参考
如果需要转载,请注明来源,支持原创,多谢合作!
使用织梦开源的分词算法库编写的YII获取分词扩展的更多相关文章
- 织梦移动版页面点击下一篇获取不到id
1.首先找到网站目录下面的/include/arc.archives.class.php文件 2.找到837行的如下内容 if ( defined('DEDEMOB') ) { $mlink = 'v ...
- C#分词算法
本文用到的库下载:点此下载 词库下载:点此下载 将词库直接放到项目根目录 词库设置如下: 类库说明 词库查看程序:点此下载 可以在上面的程序中添加常用行业词库 还可以通过下面的类在程序中实现 完整的盘 ...
- js javascirpt 数学库、 算法库 (转载)
提示:国外官网,谷歌浏览器右键可以翻译成中文. 1.math.js 官网:https://mathjs.org/index.html 其它简介:https://www.jianshu.com/p/4f ...
- 关于织梦系统不支持php中GD库的问题
大多数人在显成的PHP的CMS时,如织梦CMS,安装的时候不支持GD库,就导致整个网站的验证码不显示,以下是个人对此类问题的解决办法: 1.首先找到wamp的安装目录,找到PHP的文件夹,打开php. ...
- graph isomorphism 开源算法库VFlib, Nauty
VFlib 开源算法库网站:http://www.cs.sunysb.edu/~algorith/implement/vflib/implement.shtml Nauty 开源算法库网站:http: ...
- 开源织梦(dedecms)快速搬家图文教程
前段时间在seowhy班级群里,一个同学问织梦程序怎么搬家,好多人都遇到过这样的问题,不知道怎么去处理,今天小编分享一个简单的方法,帮大家快速搬家织梦. 好了,废话留到最后再说,看下面方法: 1. 登 ...
- 织梦Dedecms文件目录结构
Dedecms文件目录结构 /根目录 ../a 默认生成文件存放目录 ../data 系统缓存或其他可写入数据存放目录 ../dede 默认后台登录管理(可任意改名) ../images 系统默认的部 ...
- 织梦dedecms dede plus文件作用介绍及安全设置
一.安装设置 1.默认的后台模块中心有很多模块. 这里除了"友情链接"模块其他都可以删掉.在后台可以先卸载再删除. 2.如果是一开始就不想要的话,安装版plus目录下进行如下操作. ...
- 织梦Dedecms主要文件夹目录及模板文件说明
虽然织梦DedeCMS因为安全问题被人所诟病,但瑕不掩瑜,无论从用户群数量还是时间等各方面,织梦DedeCMS都是国内排名前几的CMS建站程序.如果你想学习CMS的二次开发,织梦DedeCMS是必须需 ...
随机推荐
- mac 使用清除废纸篓或彻底删除某文件 附加: smb afp ftp NAS 访问服务器相关
mac 使用清除废纸篓或彻底删除某文件 附加: smb afp ftp NAS 访问服务器相关 mac 下删除文件方法: 1.使用 cleanmymac 使用 cleamymac 的清理 和 逐个 ...
- 初识ES6
1.ECMAScript的官网地址:http://www.ecma-international.org/cma-262/6.0/,其是JS语言的下一代标准,已经在2015年6月正式发布,目标是让JS可 ...
- jQuery -《锋利的jQuery》————读后小结
jQuery是一个优秀的javascript库. 我用的是vs2012自带的 jquery-1.8.2.js这个库,在Scripts这个文件夹下面 首先,我们使用jQuery要在head标签内引入j ...
- docker基于本地模版导入创建镜像
/* 因为直接去网站拿会下载的慢,所以直接到网站里,对着此包--〉右键--〉复制链接地址 网站地址:https://openvz.org/Download/template/precreated */ ...
- LeetCode解题报告—— 2 Keys Keyboard & Longest Palindromic Substring & ZigZag Conversion
1. Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You ...
- python import模块的搜索路径
当在py代码中import所依赖的模块时, python是从哪里找到这些模块呢,即模块的搜索路径是啥? 默认情况下,Python解释器会搜索当前目录.所有已安装的内置模块和第三方模块,搜索路径存放在s ...
- BootStrap 实现导航栏nav透明,nav子元素文字不透明
在给nav 的属性赋值 opacity:0.0透明度时会导致nav内子元素会继承opacity属性.此时再对子元素赋值opacity:1.0 时会导致 子元素实际opacity值为0.0*1.0=0. ...
- 使用JAXB读写xml
1.注解 在Java模型中的创建与 xml 文件对应的节点和属性需要用注解来表示 @XmlRootElement 作用:将一个Java类映射为一段XML的根节点参数: name 定义这个根节点 ...
- nginx 开启 gzip
gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 2; gzip_types text/plain applicatio ...
- 多线程IO模型
服务端编程,首要问题是选取IO模型.即如何处理大量连接,服务更多的客户端? 我们最早有2种解法,各有不足: 1.阻塞IO,每个连接都需要一个线程. 随着连接数增多,线程数剧增,系统开销太大. 2.非阻 ...