国内流行的内容管理系统(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.

205 lines
7.4KB

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