使用织梦开源的分词算法库编写的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是必须需 ...
随机推荐
- css 背景透明,文字不透明
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- OC 07 类的扩展
1.NSDate的使用 NSDate是Cocoa中⽤于处理⽇期和时间的基础类,封装了某⼀给定的时刻(含日期,时间,时区) 注意NSLog(@“%@”,nowDate);⽆论你是哪个时区的时间,打印时总 ...
- STL不同容器的使用方法
以下内容摘自:http://blog.csdn.net/u014465639/article/details/70241850 1.vector(需要导入头文件#include <vector& ...
- MySQL的数据库引擎的类型(转)
腾讯后台开发电话面试问到数据库引擎选用的问题,这里补习一下. 本文属于转载,原文链接为:http://www.cnblogs.com/xulb597/archive/2012/05/25/251811 ...
- 深度学习方法:受限玻尔兹曼机RBM(一)基本概念
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 最近在复习经典机器学习算法的同 ...
- php写入和读取文件内容
function read_file($filename){ // $filename = "/usr/local/something.txt"; $handle = @fopen ...
- linux下c获取时间
头文件 #include "sys/time.h" 结构体 struct timezone { int tz_minuteswest; /*格林威治时间往西方的时差*/ int t ...
- Visual Studio Code 相关设置
Visual Studio Code 编译 SASS 到 CSS : 1.安装node 环境 2.Ctrl + Shift + ~,打开终端窗口 cd 到 SASS 文件目录,node-sass Te ...
- Windows服务器学习篇:服务器连接与退出
此文是我早期在公司内部发布的一篇给予新入职程序员基础技术培训的文章,非常基础简单,现拿出来给大家分享.当然,已工作人士可直接忽略... 一.Windows服务器连接 1. 在桌面菜单中的“运行”里,输 ...
- 【剑指offer】面试题 65. 不用加减乘除做加法
面试题 65. 不用加减乘除做加法 题目描述 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. Java 实现 public class Solution { ...