使用织梦开源的分词算法库编写的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是必须需 ...
随机推荐
- android 内核调试
这篇文档给出使用android emulator 和 arm-linux-androideabi-gdb 调试 android kernel 的方法 1. checkout goldfish 源码: ...
- tableView选中行的调用顺序/ 取消选中Cell
UITableViewCell它有两个属性highLighted.selected.很明显一个是高亮状态, 一个是选中状态. UITableViewCell, 对应的2个方法 // 高亮状态调用的方法 ...
- Canvas 高级
一.Canvas 高级 1.变换--位移 translate(x, y) 2.变换-缩放 scale(xS, yS) 3.变换-旋转 rotate(弧度) 4.环境的保存和释放 save() rest ...
- KettleDB连接jdbc连接池参数介绍
http://sheng8407-sina-com.iteye.com/blog/1163245 http://blog.csdn.net/dingxingmei/article/details/41 ...
- PostGIS pgrouting路径分析
--让数据库支持PostGIS和pgRouting的函数和基础表(安装后第一次使用时执行,以后都不再执行) CREATE EXTENSION postgis; CREATE EXTENSION pgr ...
- FineReport——表单设计
在单元格的数据设置这一选项中,有分组,列表,汇总三个选项.分组显示,即将相同的项合并,列表则将每一行的数据逐一的展示,不会合并相同的值,每一行的是完整的一条记录,而汇总则是将数字型数据进行汇总. 分组 ...
- 今天开始学模式识别与机器学习(PRML),章节5.1,Neural Networks神经网络-前向网络。
今天开始学模式识别与机器学习Pattern Recognition and Machine Learning (PRML),章节5.1,Neural Networks神经网络-前向网络. 话说上一次写 ...
- hdu 2044-2050 递推专题
总结一下做递推题的经验,一般都开成long long (别看项数少,随便就超了) 一般从第 i 项开始推其与前面项的关系(动态规划也是这样),而不是从第i 项推其与后面的项的关系. hdu2044:h ...
- 【转载】 ftp 命令行
原文在这里. 本文中,介绍在 Linux shell 中如何使用 ftp 命令.包括如何连接 FTP 服务器,上传或下载文件以及创建文件夹.尽管现在有许多不错的 FTP 桌面应用,但是在服务器.SSH ...
- 使用GitLab进行落地项目的管理,并且自动更新、重启、回滚
Gitlab 清空项目历史commit,节省空间 http://blog.csdn.net/dounine/article/details/77840416?locationNum=6&f ...