За последние 24 часа нас посетили 34147 программистов и 1314 роботов. Сейчас ищут 927 программистов ...

Скрипт поиска ключевых слов.

Тема в разделе "PHP для новичков", создана пользователем Dima4321, 6 дек 2010.

  1. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Всем привет.

    Вот хочу упростить себе работу. И написать самый простенький скрпит поиска ключевых слов.
    Пока не знаю с чего начать.

    Пока вижу это так:

    1. Получаю строку( текст слов этак в 300-400) применяю функию explode, которая все слова представит мне в виде массива с индексами.
    2. Затем при помощи другой функции я должен найти из этого массива потворяющиеся слова (например более 2- раз) и отправить на вывод.


    как реализовать подобное или может подскажите функции для массивов и строк необходимые для этого.

    ??
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  3. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Рано еще )) вопросы будут подожди )
     
  4. ridraider

    ridraider Активный пользователь

    С нами с:
    23 окт 2010
    Сообщения:
    65
    Симпатии:
    0
    А исключить союзы?
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    И исключить союзы! :D
     
  6. karlozzz

    karlozzz Активный пользователь

    С нами с:
    24 окт 2010
    Сообщения:
    430
    Симпатии:
    0
    Адрес:
    Y-OLA
    какой к чертям explode

    "привет, это строка"

    и что в массиве будет?

    привет,
    это
    строка

    тут нужен текстовый процессор или ругулярки, потом исключаешь союзы и считаешь
     
  7. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Так работает:

    PHP:
    1. <?php
    2.  
    3. ini_set('display_errors',1);
    4.  
    5.  
    6.  
    7.  $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",);
    8.  $key=array_count_values($array);
    9.  foreach ($key as $key => $value)
    10. {
    11. if($value>2)
    12.  
    13. {
    14.  
    15.  
    16. echo "$key ,";
    17.  
    18. }
    19.  
    20.  
    21. }
    22.  
    23.  
    24.  
    25.  ?>
    26.  
    А вот так выдает не то


    PHP:
    1. <?php
    2.  
    3. ini_set('display_errors',1);
    4.  
    5.  
    6.  
    7.  $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",);
    8.  $key=array_count_values($array);
    9.  foreach ($key as $key => $value)
    10. {
    11. if($value>2)
    12.  
    13. {
    14.  
    15. echo " <head> ";
    16. echo "<title>$key</title>";
    17. echo "<link rel='stylesheet' type='text/css' href='index.css'>";
    18. echo "<meta name='description' content='MP3 music store. You Can Buy Music On MP3 CD Here. Low Price !'>";
    19. echo "<meta name='keywords' content='$key'>";
    20. echo " </head> ";
    21.  
    22. }
    23.  
    24.  
    25. }
    26.  
    27.  
    28.  
    29.  ?>
     
  8. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    В титл попадает только слово "ты" ((

    Полагаю , что и в мету попадает тоже слово ты

    В первом же варианте скрипта все работает нормально: (выодятся слова и ты и я)
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Не знаю что ты хотел сказать выражением
    Код (Text):
    1. if($value>2)
    и не уверен что запись
    Код (Text):
    1. foreach ($key as $key => $value)
    всегда будет работать корректно, но думаю ты создал гидру.
     
  10. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0

    А шшшооо такое гидра ??)) я просто сам не местный и не понимаю ...

    Типа если слово повторяется больше 2 раз в тексте. Это я хотел сказать.

    Почему Foreach не будет работать корректно ??
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Точно, что-то я затупил.

    Может и будет, но имя массива и имя переменной с ключом элемента совпадает, что может запутать как программиста так и интерпретатор.

    (выделено мной)
     
  12. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Ау ???

    Ну кто-нибудь что-нибудь по теме ???
     
  13. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    короче кто напишет нормальный анализатор меня с собой берите, берем кредит открываем яндекс :D
     
  14. karlozzz

    karlozzz Активный пользователь

    С нами с:
    24 окт 2010
    Сообщения:
    430
    Симпатии:
    0
    Адрес:
    Y-OLA
    Padaboo
    Договорились, я пишу анализатор, ты на себя берешь кредит...))
    Понимаешь, в поисковых системах анализатор не много значит, это вообще отдельная наука, вроде Брин защитил работу на тему: "Извлечении информации из неструктурированных источников и поиск в крупных собраниях текстовых и научных данных", один анализатор ключевых слов в тексте погоду не сделает тут и ИЦ требуется и релевантность)))
     
  15. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Ребята ..ну куда вы уехали то .??)

    Мне нужно то всего:

    1. Чтобы функция создала массив с кол-вом вхождений каждого слова.
    Это сделала array_count_values,
    2. а потом записать в mety все слова встречающиеся больше 2 раз.




    Неужели это нельзя кооректно сделать..??
     
  16. ridraider

    ridraider Активный пользователь

    С нами с:
    23 окт 2010
    Сообщения:
    65
    Симпатии:
    0
    Можно, делай.
     
  17. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    karlozzz
    а мне казалось, что все это и есть анализатор
     
  18. voxel

    voxel Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    19
    Симпатии:
    0
    1. array_count_values не даст склонений (различные окончания слов), так свойственных русскому языку. Я вижу несколько вариантов решения проблемы:
    1.1. Модификация алгоритма шинглов.
    1.2. Сфинкс со стеммингом для русского языка.
    2. Если автора вопроса устраивает решение с array_count_values, то нужно использовать join:

    PHP:
    1. <?php
    2.     $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",);
    3.     $key=array_count_values($array);
    4.    
    5.     // Если хотим получить num_words наиболее часто встречающихся
    6.     // $num_words = 2;
    7.     // arsort($key);
    8.     // $keywords = array_slice(array_flip($key), 0, $num_words);
    9.    
    10.     // Если хотим получить отсечение по порогу
    11.     function gt2($var)
    12.     {
    13.         $treshold = 2;
    14.         return $var>$treshold;
    15.     }
    16.  
    17.     $keywords = array_flip(array_filter($key, "gt2"));
    18.     $keywords = join(' ', $keywords);
    19. ?>
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    кстати больше десяти слов размещать в таких местах не рекомендуется.
     
  20. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот работающий код с ключевиками.

    PHP:
    1. <?php
    2.  
    3.  ini_set('display_errors',1);
    4.  error_reporting(E_ALL);
    5.  
    6.  
    7.  
    8.   $array = array("ты", "я", "мы", "мы", "мы", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",);
    9.   $mass=array_count_values($array);
    10.  
    11.    echo "<meta name='keywords' content='";
    12.  
    13.   foreach ($mass as $key => $value)
    14.  {
    15.  if($value>2)
    16.  
    17.  {
    18.  
    19.  
    20.  echo "$key ,";
    21.  
    22.  }
    23.  
    24.  
    25.  }
    26.  
    27. echo "'>";
    28.  
    29.  
    30.  
    31.   ?>
    voxel твой код почему-то не работает
     
  21. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот и с ключевиками и с титлом

    PHP:
    1. <?php
    2.  
    3.  ini_set('display_errors',1);
    4.  error_reporting(E_ALL);
    5.  
    6.  
    7.  
    8.   $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",);
    9.   $mass=array_count_values($array);
    10.   echo "<title>";
    11.   foreach ($mass as $key => $value)
    12.  {
    13.  if($value>2)
    14.  
    15.  {
    16.  
    17.  
    18.  echo "$key ,";
    19.  
    20.  }
    21.  
    22.  
    23.  }
    24.  
    25. echo "</title>";
    26.  
    27.  echo "<meta name='keywords' content='";
    28.  
    29.   foreach ($mass as $key => $value)
    30.  {
    31.  if($value>2)
    32.  
    33.  {
    34.  
    35.  
    36.  echo "$key ,";
    37.  
    38.  }
    39.  
    40.  
    41.  }
    42.  
    43. echo "'>";
    44.  
    45.  
    46.  
    47.  
    48.  
    49.   ?>
    50.  
     
  22. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот поиск титлов но уже по другому скрипту


    PHP:
    1. <?php
    2.  
    3.  ini_set('display_errors',1);
    4.  error_reporting(E_ALL);
    5.  
    6. $string = "жизнь тяжелая штука, когда жизнь бьет тебя.";
    7.  
    8. echo "<title>";
    9. $string_array = explode(" ",$string);
    10. foreach($string_array as $value)
    11. {
    12.     if(isset($str_count[$value]))
    13.         $str_count[$value]++;
    14.     else
    15.         $str_count[$value]=1;
    16. }
    17. foreach($str_count as $key => $value)
    18.  
    19. {
    20.  
    21. if($value>1)
    22. {
    23.  
    24.     echo "$key, ";
    25.  
    26. }
    27.  
    28. }
    29.  
    30. echo "</title>";
    31.  
    32.  
    33. ?>
     
  23. voxel

    voxel Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    19
    Симпатии:
    0
    Поставьте die ($keywords) в конце, или echo :)
     
  24. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    die остановит скрипт
     
  25. voxel

    voxel Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    19
    Симпатии:
    0
    Простите уж мою иронию в ответе :)