ホームページ  >  記事  >  バックエンド開発  >  リクエストされたページからキーワードを抽出する

リクエストされたページからキーワードを抽出する

WBOY
WBOYオリジナル
2016-07-25 08:49:341070ブラウズ
指定された URL 検索 Web ページからいくつかのキーワードを抽出できます

例えば、Code Zhuji のホームページからは、下の図のようなキーワードを抽出できます リクエストされたページからキーワードを抽出する リクエストされたページからキーワードを抽出する
  1. if(!empty($_REQUEST["url"])){
  2. include 'class.keywords.php';
  3. $keywords = new tagsugest();
  4. $keywords- >_lang = 'es';
  5. $keywords->_encoding = 'iso-8859-1';
  6. $keywords->_catego = 'telecom';
  7. $keywords->_keyCount = 100; のようなものです。パーセント %
  8. $keywords->file($_REQUEST['url']);
  9. #$keywords->readMetaKeyWords();
  10. #$keywords->readHtmlKeyWords();
  11. $keywords-> ;readAll();
  12. echo '見つかったキーワード:

    ';
  13. $i = 1;
  14. foreach($keywords->get() as $word) echo $i++ .". $word
    ";
  15. }
  16. //url 例: http://www.codepearl.com
  17. echo "
    ";
  18. ?>
コードをコピー
  1. classキーワードugest{
  2. var $_html = FALSE;
  3. var $_keyCount = 5;
  4. var $_keyWords = array();
  5. var $_encoding = 'UTF-8';
  6. var $_lang = 'es';
  7. var $_catego = 'テレコム';
  8. var $_url = '';
  9. /**
  10. * # メタキーワードを読む
  11. *
  12. */
  13. public function readMetaKeyWords() {
  14. if (! $this->_html) return;
  15. preg_match('/<[s] *メタ[s]*名前[s]*=[s]*"[s]*キーワード[s]*"[s]*コンテンツ[s]*=[s]*"?([^>"] *)"?[s]*[/]?[s]*>/is', $this->_html, $match);
  16. //$tags = get_meta_tags($this->_url);
  17. //echo $tags['keywords'];
  18. if (count($match)) {
  19. $this->_keyWords = array_unique(explode(',', preg_replace('/s/i', ' ', mb_strto lower($match[1], $this->_encoding))));
  20. }
  21. }
  22. /**
  23. * タグを削除します
  24. *
  25. * @param 混合 $string
  26. */
  27. プライベート関数 rip_tags($string) {
  28. // -- --- HTML タグを削除します -----
  29. $string = preg_replace ('/<[^>]*>/', ' ', $string);
  30. /* // -----制御文字を削除します -----
  31. $string = str_replace("r", '', $string); // --- 空のスペースに置換します
  32. $string = str_replace("n", ' ', $string) ; // --- スペースで置換
  33. $string = str_replace("t", ' ', $string); // --- スペースに置換します
  34. */
  35. // ----- 複数のスペースを削除します -----
  36. $string =trim(preg_replace('/ {2,}/', ' ', $string) );
  37. return $string;
  38. }
  39. /**
  40. * # ページ本文または文字列からキーワードを読み取ります
  41. *
  42. */
  43. public function readHtmlKeyWords() {
  44. if (! $this->_html) return;
  45. if(!empty($ this->_keyWords)){
  46. $implo = implode(' ',$this->_keyWords);
  47. $this->>_html = $this->_html." ".$implo;
  48. $this- >_keyWords = array();
  49. }
  50. $this->_html = str_replace(' ',' ', $this->_html);
  51. # 不要な部分を削除します
  52. $toRemove = array(' head', 'script', 'style', 'object', 'embed', 'noembed', 'applet', 'noframes', 'noscript');
  53. foreach ($toRemove as $remove) $this-> ;_html = preg_replace("/.*?/is", ' ', $this->_html);
  54. # コメントを削除します
  55. $this->_html = preg_replace("//is", ' ', $this->_html);
  56. # HTML タグを削除
  57. $this->_html = mb_strto lower($this->rip_tags($this->_html), $this->_encoding);
  58. $this->_html = htmlspecialchars_decode($this->_html );
  59. # エンコードされた hmtl エンティティをデコードします
  60. $this->_html = html_entity_decode ($this->gt;_html, ENT_COMPAT, $this->_encoding);
  61. # 単語に分割します
  62. $words = preg_split("/ [s]+|[t]+|[.]+|[,]+|[:]+|[;]+|[!]+|[?]+|[|]+/s", $this ->_html、-1、PREG_SPLIT_NO_EMPTY);
  63. if (count($words)) {
  64. $frequency = array_count_values($words);
  65. unset($frequency['']);
  66. if (count($frequency)) {
  67. # ストップワードを削除と間句
  68. include('stopwords_'.$this->_lang.'.php');
  69. include('glodic_'.$this->_catego.'_'.$this->_lang.'.php ');
  70. $punct = '~!@#$%^&*()_+|}{[];:'",<>./?`-=\';
  71. foreach (array_keys ($frequency) as $word) {
  72. if ( (in_array($w​​ord, $stopWords)) または (strspn($word, $punct) == strlen($word)) ){ unset($frequency[$word] ); }
  73. }
  74. $max = max($frequency);
  75. $count = count($frequency);
  76. $tot =round(($max * 100) / $count);
  77. $tot2 =round(( $this->_keyCount * 100) / $count);
  78. if($tot > $count){$tot = $tot / 2;}
  79. if($tot2 > $count){$tot = $tot / 2;}
  80. $showmax =round(($tot + $tot2) / 2);
  81. foreach (array_keys($frequency) as $word) {
  82. if ( in_array($w​​ord, $glodic) ){$frequency[$word] = $frequency[$word] + $showmax; }
  83. }
  84. # 頻度で並べ替えます
  85. arsort($frequency, SORT_NUMERIC);
  86. # キーワード配列に追加します
  87. $i = 0;
  88. foreach ($frequency as $word=>$count) {
  89. if ( (! in_array($w​​ord, $this->_keyWords)) &&
  90. (! is_numeric($word)) &&
  91. (! empty($word)) ) {
  92. $this->_keyWords[] = ( string)$word;
  93. $i++;
  94. if ($i == $showmax) Break;
  95. }
  96. }
  97. }
  98. }
  99. }
  100. /**
  101. * エンコーディングをデフォルトの utf-8 から変更します
  102. *
  103. * @parammixed $enc
  104. */
  105. プライベート関数エンコーディング($ enc = FALSE) {
  106. if ($enc) $this->_encoding = $enc;
  107. }
  108. /**
  109. * # ファイルまたは URL から読み取ります
  110. *
  111. * @parammixed $fileUrl
  112. */
  113. public function file($fileUrl = FALSE) {
  114. if ($fileUrl){ $this->_html = @file_get_contents($fileUrl);
  115. $this- >_url = $fileUrl;
  116. }
  117. }
  118. /**
  119. * # HTML を文字列として定義します
  120. *
  121. * @parammixed $page
  122. */
  123. public function html($page = FALSE) {
  124. if ($page) $this->_html = $page ;
  125. }
  126. /**
  127. * # メタキーワードと本文の両方を読み取ります
  128. *
  129. */
  130. public function readAll() {
  131. if ($this->_html !== FALSE) {
  132. $this->readMetaKeyWords();
  133. $this->readHtmlKeyWords();
  134. }
  135. $this->_keyWords = array_unique($this->_keyWords);
  136. }
  137. /**
  138. * # キーワードを配列として返します
  139. *
  140. */
  141. public function get() {
  142. return $this->_keyWords;
  143. }
  144. }
  145. ?>
复制代


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。