Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie słów kluczowych
Forum PHP.pl > Forum > PHP
kiler129
Witajcie!
Czy ktoś widział/posiada klasę bądź ma pomysł jak generować słowa kluczowe na podstawie tekstu?
Sam napisałem taką metodę:

  1. function generateKeywords($txt, $num=10) { //It works soooo bad
  2. if($num<=0)return array(); //Faster way ;]
  3. $lngSpec = array("œ", "´", "Ž", "ó", "π", "ŕ", "Ę", "∂", "ƒ", "˙", "˚", "∏", "˝", "ę", "ç", "∫", "ƒ", "ľ", "ë", "˙", "ü", "ď", "ä", "ę");
  4. $latin = array("q", "e", "t", "o", "l", "a", "s", "d", "n", "k", "z", "l", "˝", "z", "c", "l", "n", "k", "d", "o", "u", "e", "a", "z");
  5.  
  6. //Put here 50-100 most freq. words for your language (use frequency dictionary)
  7. $frqWrds = array("si´", "i", "w", "nie", "na", "z", "do", "to", "˝e", "a", "o", "jak", "ale", "po", "co", "tak", "jest", "za", "od", "go", "ju˝", "jego", "jej", "tym", "mnie", "czy", "przez", "tylko", "by∏", "by∏o", "tego", "mi", "mu", "sobie", "jeszcze", "mo˝e", "ze", "kiedy", "pan", "ich", "dla", "by", "gdy", "teraz", "ja", "ten", "jŕ", "ma", "by∏a", "który", "nawet", "bardzo", "przed", "tu", "jednak", "pod", "coĘ", "tam", "wszystko", "przy", "wi´c", "nic", "bo", "nim", "powiedzia∏", "˝eby", "mia∏", "on", "byç", "tej", "b´dzie", "potem", "te˝", "które", "jeĘli", "ci", "bez", "sŕ", "niego", "nad", "gdzie", "pani", "lecz", "nas", "siebie", "nich", "je", "nigdy", "ani", "w∏aĘnie", "sam", "u", "mam", "te", "dobrze", "ni˝", "jestem", "jakby", "aby", "ty"); //Example for polish
  8. //$frqWrds = array("a", "able", "about", "about", "across", "act", "action", "activity", "actually", "add", "after", "after", "again", "against", "age", "agree", "all", "all", "allow", "almost", "already", "also", "although", "always", "among", "an", "and", "another", "any", "anything", "appear", "area", "around", "around", "as", "as", "as", "ask", "at", "authority", "available", "away", "back", "back", "bad", "bank", "be", "because", "become", "before", "before", "begin", "behind", "believe", "between", "big", "bit", "body", "book", "both", "both", "boy", "bring", "build", "building", "business", "but", "buy", "by", "call", "can", "car", "carry", "case", "centre", "century", "certain", "change", "change", "child", "church", "city", "class", "clear", "come", "committee", "community", "company", "condition", "consider", "continue", "control", "cost", "could", "council", "country", "course", "court", "create", "day", "death", "decide", "decision", "department", "describe", "develop", "development", "die", "different", "difficult", "do", "door", "down", "draw"); //Example for english
  9.  
  10. $txt = str_ireplace($lngSpec, $latin, $txt);
  11. $txt = preg_replace('/[^A-Za-z0-9]-/', " ", $txt);
  12. $txt = @str_ireplace($frqWrds, "", $txt); //Mute notice about no $frqWrds
  13. $kwds = str_word_count($txt, 2);
  14. krsort($kwds);
  15.  
  16. if($num>($kwds_c=sizeof($kwds)))$num=$kwds_c; //Prevent hanging
  17.  
  18. $i=0;
  19. foreach($kwds as $val) {
  20. $out[] = $val;
  21. $i++;
  22. if($i==$num)return $out;
  23. }
  24. }

Ale zgodnie z komentarzem działa no ... źle wink.gif
gothye
zamieszczam klase do generowania słow kluczowych z tekstu :
  1. class SEO
  2. {
  3. private $text;
  4.  
  5. private $charset = 'UTF-8' ;
  6.  
  7. private $bannedWords = array("si´", "i", "w", "nie", "na", "z", "do", "to", "˝e", "a", "o", "jak", "ale", "po", "co", "tak", "jest", "za", "od", "go", "ju˝", "jego", "jej", "tym", "mnie", "czy", "przez", "tylko", "by∏", "by∏o", "tego", "mi", "mu", "sobie", "jeszcze", "mo˝e", "ze", "kiedy", "pan", "ich", "dla", "by", "gdy", "teraz", "ja", "ten", "jŕ", "ma", "by∏a", "który", "nawet", "bardzo", "przed", "tu", "jednak", "pod", "coĘ", "tam", "wszystko", "przy", "wi´c", "nic", "bo", "nim", "powiedzia∏", "˝eby", "mia∏", "on", "byç", "tej", "b´dzie", "potem", "te˝", "które", "jeĘli", "ci", "bez", "sŕ", "niego", "nad", "gdzie", "pani", "lecz", "nas", "siebie", "nich", "je", "nigdy", "ani", "w∏aĘnie", "sam", "u", "mam", "te", "dobrze", "ni˝", "jestem", "jakby", "aby", "ty");
  8.  
  9. public function SEO($text = '' , $charset='UTF-8')
  10. {
  11. $text = html_entity_decode($text,ENT_QUOTES,$this->charset);
  12. $text = strip_tags($text);
  13. $text = preg_replace('/\s\s+/', ' ', $text);
  14. $text = str_replace (array('\r\n', '\n', '+'), ',', $text);
  15. $text = trim($text);
  16. $text = mb_strtolower($text,$this->charset);
  17. $this->text = $text;
  18.  
  19. $this->charset=$charset;
  20. }
  21.  
  22. public function description($len=null)
  23. {
  24. return mb_substr($this->text, 0, (int) $len ,$this->charset);
  25. }
  26.  
  27. public function keywords($MaxWords = null , $WordLen = 4 )
  28. {
  29. $text = $this->text;
  30. $text = str_replace (array('–','(',')','+','=','<', '>','_', '[', ']', ':','!', '?',':','?','!','_','*','-'), '', $text);
  31. $text = str_replace (array(' ','.'), ',', $text);
  32.  
  33. $words = array();
  34.  
  35. $arrText=explode(',',$text);
  36. unset($text);
  37. foreach ($arrText as $value)
  38. {
  39. $value=trim($value);
  40. if ( strlen($value) >= $WordLen && !in_array($value,$this->bannedWords) )
  41. {
  42. $words[$value]= (array_key_exists($value , $words) ? $words[$value]+1 : 1);
  43. }
  44. }
  45. unset($arrText);
  46.  
  47. uasort($words,array($this,'cmp'));
  48. //ksort($wordCounter);
  49.  
  50. $i=1;
  51. $keywords='';
  52. foreach($words as $key => $value)
  53. {
  54. $keywords.=$key.', ';
  55. if ($i < $MaxWords)
  56. {
  57. $i++;
  58. }else{
  59. break;
  60. }
  61. }
  62. unset($words);
  63.  
  64. $keywords = substr($keywords,0,-2);
  65.  
  66. return $keywords;
  67. }
  68.  
  69. private function cmp($a, $b)
  70. {
  71. if ($a == $b)
  72. return 0;
  73.  
  74. return ($a < $b) ? 1 : -1;
  75. }
  76. }
  77. //Simple usage:
  78. $seo = new SEO($text);
  79.  
  80. echo '<br /><b>keywords:</b> '.$seo->keywords(15);
  81. echo '<br /><b>description:</b> '.$seo->description(200);
  82. ?>


wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.