Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[发布] 感恩回馈:不依赖TAG,相关文章超高精准度

[复制链接]
bqridt 发表于 2014-4-22 16:18:52 | 显示全部楼层 |阅读模式
本帖最后由 bqridt 于 2014-4-22 19:44 编辑
效果如下:

xg.jpg
实现思路:用现成的scws分词技术+中文转英文特征检索;

优势:不依赖TAG(DZ TAG功能太累赘),匹配度非常高,后台操作,不影响前台访问速度;
缺点:暂时没发现;

对比:你们可以看一下本贴子下面的DISCUZ提供的相关内容,可以说完全不准确;如果本标题用我用的这个切词应该是:感恩,回馈,依赖,TAG,相关,文章,精度。
然后从数据库中按关键字相同文章进行匹配;返回顺序从最高匹配开始,并且执行效率非常高;
也就是说,哪篇文章拥有以上关键字最多,则从最多的开始返回结果;

功能:相关性是SEO中非常重要的因素,这是关系到你网站的整体性;就像是一个人来向你了解关于“怎么把文章相关度提高”,然后你除了向他提供此消息外,还提供相关度代码,方案,功能,案例等等他感兴趣的内容;对搜索也一样,它也是尽可能摸拟人的思维去判断一个网站质量的好坏;
提示:我用的discuz x2,我会把涉及的文件和原代码贴出来,但是你要搬走需要稍微懂点代码;因为这是纯手写的,无插件;
我也是个代码盲,只能混个眼熟,认识几个常用的单词;你也只要到这个程度,甚至更低的程度就能搬走;如果你懂较多代码的只要把这个思路学了,可以自己开发插件;

原文地址:http://t.yest.la/?p=164

具体操作如下:
第一步:thread表加新字段:tag,类型为text 索引为全文索引
第二步:下载pscws4放到网站根目录;
第三步:更新老数据:CODE{
<?php
require ‘fc/pscws4.class.php’;
function keya($text){
$pscws = new PSCWS4(‘utf8′);
$pscws->set_dict(‘fc/etc/dict.xdb’);
$pscws->set_rule(‘fc/etc/rules.ini’);
$pscws->send_text($text);
$s=””;
while ($some = $pscws->get_result())
{
foreach ($some as $word)
{
//
if (strlen($word[word])>2)//UTF8编码的请设置为3,由于UTF8编码的中文普通为3个字节以上,过滤单个
字不保管!
{
$k.=base64_encode($word[word]).” “;
echo $word[word];
}
//
}
}
return $k;
}
$conn=mysql_connect(“localhost”, “uers”, “password”);
mysql_select_db(“dbname”);
mysql_query(“set names ‘utf8′”);
if($query=mysql_query(“select tid,subject from thread where displayorder>=0
“,$conn))
{
while($row=mysql_fetch_array($query))
{
$k= keya(iconv(“UTF-8″, “GB2312//IGNORE”, $row[subject]));
if(mysql_query(“update thread set tag=’$k’ where tid=$row[tid] “,$conn))
echo $k.$row[tid].”成功!<br>”;
}
}
?>
}
第四步:检索数据,文件:forum_viewthread.php,CODE{
$colist=””;
$i=1;
//随即查询over
$row=DB::fetch(DB::query(“SELECT tid,tag FROM “.DB::table(‘forum_thread’).” WHERE
displayorder>=0 and tid=$_G[tid]“));
$tag=$row[tag];
$query = DB::query(“select subject,tid,MATCH(tag) AGAINST(‘”.trim($tag).”‘ IN BOOLEAN MODE) AS
score from “.DB::table(‘forum_thread’).” where MATCH(tag) AGAINST(‘”.trim($tag).”‘ IN BOOLEAN
MODE) and tid!=$row[tid] and displayorder>=0 ORDER BY score DESC limit 10″);
while($rs = DB::fetch($query)) {
$colist[$i]['tid']=$rs[tid];
$colist[$i]['subject']=$rs['subject'];
$i++;
}
}
第五步:前台代码,文件:viewthread_node.htm,CODE{
<!–{loop $colist $var}–>
<li>&#8226; <a href=”c$var[tid]1-1/” title=”$var[subject]” target=”_blank”>$var[subject]</a></li>
<!–{/loop}–>
}
第六步:效果


第七步:发贴时获取数据,文件:post_newthread.php,CODE{
1、文件头部加入:
require ‘./fc/pscws4.class.php’;
function keya($text){
$pscws = new PSCWS4(‘utf8′);
$pscws->set_dict(‘./fc/etc/dict.xdb’);
$pscws->set_rule(‘./fc/etc/rules.ini’);
$pscws->send_text($text);
$s=””;
while ($some = $pscws->get_result())
{
foreach ($some as $word)
{
//
if (strlen($word[word])>2)//UTF8编码的请设置为3,由于UTF8编码的中文普通为3个字节以上,过滤单个字不保管!
{
$k.=base64_encode($word[word]).” “;
echo $word[word];
}
//
}
}
return $k;
}
2、查找:insert 或者 $tid = DB::insert_id();
在下面加入:
$taga=keya($subject);
DB::query(“update “.DB::table(‘forum_thread’).” set tag=’$taga’ where tid=$tid”);
}

PS:怎么加新词?code{
function get_key($str,$k){
if(strstr($str,”新词”))
$k.=” xinci”;//前面有个空格,只是举例,可以根据自己的需要写成数组或编入数据库,php中文转英文百度一查就知道
}
}








回复

使用道具 举报

 楼主| bqridt 发表于 2014-4-22 19:46:16 | 显示全部楼层

不好意思,只能提供代码和涉及文件,需要自己安装,不能提供傻瓜式安装方式;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-11-22 23:16 , Processed in 0.098818 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表