国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
6.7KB

  1. <?php
  2. /**
  3. * 文档关键词生成
  4. *
  5. * @version $Id: article_keywords_make.php 1 8:26 2010年7月12日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2007 - 2019, DesDev, Inc.
  8. * @license http://help.dedecms.com/usersguide/license.html
  9. * @link http://www.dedecms.com
  10. */
  11. @ob_start();
  12. @set_time_limit(3600);
  13. require_once(dirname(__FILE__).'/config.php');
  14. CheckPurview('sys_Keyword');
  15. if(empty($dopost)) $dopost = '';
  16. //分析已存在的关键字(适用于默认的文章模型)
  17. if($dopost=='analyse')
  18. {
  19. echo "正在读取关键字数据库...<br/>\r\n";
  20. flush();
  21. $ws = $wserr = $wsnew = "";
  22. $dsql->SetQuery("SELECT * FROM `#@__keywords`");
  23. $dsql->Execute();
  24. while($row = $dsql->GetObject())
  25. {
  26. if($row->sta==1) $ws[$row->keyword] = 1;
  27. else $wserr[$row->keyword] = 1;
  28. }
  29. echo "完成关键字数据库的载入!<br/>\r\n";
  30. flush();
  31. echo "读取档案数据库,并对禁用的关键字和生字进行处理...<br/>\r\n";
  32. flush();
  33. $dsql->SetQuery("SELECT id,keywords FROM `#@__archives`");
  34. $dsql->Execute();
  35. while($row = $dsql->GetObject())
  36. {
  37. $keywords = explode(',',trim($row->keywords));
  38. $nerr = false;
  39. $mykey = '';
  40. if(is_array($keywords))
  41. {
  42. foreach($keywords as $v)
  43. {
  44. $v = trim($v);
  45. if($v=='')
  46. {
  47. continue;
  48. }
  49. if(isset($ws[$v]))
  50. {
  51. $mykey .= $v." ";
  52. }
  53. else if(isset($wsnew[$v]))
  54. {
  55. $mykey .= $v.' ';
  56. $wsnew[$v]++;
  57. }
  58. else if(isset($wserr[$v]))
  59. {
  60. $nerr = true;
  61. }
  62. else
  63. {
  64. $mykey .= $v." ";
  65. $wsnew[$v] = 1;
  66. }
  67. }
  68. }
  69. }
  70. echo "完成档案数据库的处理!<br/>\r\n";
  71. flush();
  72. if(is_array($wsnew))
  73. {
  74. echo "对关键字进行排序...<br/>\r\n";
  75. flush();
  76. arsort($wsnew);
  77. echo "把关键字保存到数据库...<br/>\r\n";
  78. flush();
  79. foreach($wsnew as $k=>$v)
  80. {
  81. if(strlen($k)>20)
  82. {
  83. continue;
  84. }
  85. $dsql->SetQuery("INSERT INTO `#@__keywords`(keyword,rank,sta,rpurl) VALUES('".addslashes($k)."','$v','1','')");
  86. $dsql->Execute();
  87. }
  88. echo "完成关键字的导入!<br/>\r\n";
  89. flush();
  90. sleep(1);
  91. }
  92. else
  93. {
  94. echo "没发现任何新的关键字!<br/>\r\n";
  95. flush();
  96. sleep(1);
  97. }
  98. ShowMsg('完成所有操作,现在转到关键字列表页!','article_keywords_main.php');
  99. exit();
  100. }
  101. //自动获取关键字(适用于默认的文章模型)
  102. else if($dopost=='fetch')
  103. {
  104. require_once(DEDEINC."/splitword.class.php");
  105. if(empty($startdd))
  106. {
  107. $startdd = 0;
  108. }
  109. if(empty($pagesize))
  110. {
  111. $pagesize = 20;
  112. }
  113. if(empty($totalnum))
  114. {
  115. $totalnum = 0;
  116. }
  117. //统计记录总数
  118. if($totalnum==0)
  119. {
  120. $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__archives` WHERE channel='1' ");
  121. $totalnum = $row['dd'];
  122. }
  123. //获取记录,并分析关键字
  124. if($totalnum > $startdd+$pagesize)
  125. {
  126. $limitSql = " LIMIT $startdd,$pagesize";
  127. }
  128. else if(($totalnum-$startdd)>0)
  129. {
  130. $limitSql = " LIMIT $startdd,".($totalnum - $startdd);
  131. }
  132. else
  133. {
  134. $limitSql = '';
  135. }
  136. $tjnum = $startdd;
  137. if($limitSql!='')
  138. {
  139. $fquery = "SELECT arc.id,arc.title,arc.keywords,addon.body FROM `#@__archives` arc
  140. LEFT JOIN `#@__addonarticle` addon ON addon.aid=arc.id WHERE arc.channel='1' $limitSql ";
  141. $dsql->SetQuery($fquery);
  142. $dsql->Execute();
  143. $sp = new SplitWord($cfg_soft_lang , $cfg_soft_lang );
  144. while($row=$dsql->GetObject())
  145. {
  146. if($row->keywords!='')
  147. {
  148. continue;
  149. }
  150. $tjnum++;
  151. $id = $row->id;
  152. $keywords = "";
  153. $sp->SetSource($row->title, $cfg_soft_lang , $cfg_soft_lang );
  154. $sp->SetResultType(2);
  155. $sp->StartAnalysis(TRUE);
  156. $titleindexs = $sp->GetFinallyIndex();
  157. $sp->SetSource(Html2Text($row->body), $cfg_soft_lang , $cfg_soft_lang );
  158. $sp->SetResultType(2);
  159. $sp->StartAnalysis(TRUE);
  160. $allindexs = $sp->GetFinallyIndex();
  161. if(is_array($allindexs) && is_array($titleindexs))
  162. {
  163. foreach($titleindexs as $k => $v)
  164. {
  165. if(strlen($keywords)>=30)
  166. {
  167. break;
  168. }
  169. else
  170. {
  171. if(strlen($k) <= 2) continue;
  172. $keywords .= $k.",";
  173. }
  174. }
  175. foreach($allindexs as $k => $v)
  176. {
  177. if(strlen($keywords)>=30)
  178. {
  179. break;
  180. }
  181. else if(!in_array($k,$titleindexs))
  182. {
  183. if(strlen($k) <= 2) continue;
  184. $keywords .= $k.",";
  185. }
  186. }
  187. }
  188. $keywords = addslashes($keywords);
  189. if($keywords=='')
  190. {
  191. $keywords = ',';
  192. }
  193. $dsql->ExecuteNoneQuery("UPDATE `#@__archives` SET keywords='$keywords' WHERE id='$id'");
  194. }
  195. unset($sp);
  196. }//end if limit
  197. //返回提示信息
  198. if($totalnum>0) $tjlen = ceil( ($tjnum/$totalnum) * 100 );
  199. else $tjlen=100;
  200. $dvlen = $tjlen * 2;
  201. $tjsta = "<div style='width:200;height:15;border:1px solid #898989;text-align:left'><div style='width:$dvlen;height:15;background-color:#829D83'></div></div>";
  202. $tjsta .= "<br/>完成处理文档总数的:$tjlen %,位置:{$startdd},继续执行任务...";
  203. if($tjnum < $totalnum)
  204. {
  205. $nurl = "article_keywords_make.php?dopost=fetch&totalnum=$totalnum&startdd=".($startdd+$pagesize)."&pagesize=$pagesize";
  206. ShowMsg($tjsta,$nurl,0,500);
  207. }
  208. else
  209. {
  210. ShowMsg("完成所有任务!","javascript:;");
  211. }
  212. exit();
  213. }
  214. include DedeInclude('templets/article_keywords_make.htm');