Скрипт для определение ключевых слов

Тема в разделе "Коммерческие", создана пользователем CrashX, 19 окт 2008.

Информация :
Публиковать (для всех) нуленые версии, особенно от modulesgarden КАТЕГОРИЧЕСКИ не стоит. Тема мониторится оным разработчиком, а к нам приходят абузы которые нельзя игнорировать.
Статус темы:
Закрыта.
Модераторы: Amazko, Aste
  1. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    Скрипт для определение ключевых слов
    также не помешала бы функция определения плотности, если возможно приутствие морфологиечекого модуля, для отсечения частей слов и поиска только части слова.
    можно все отдельно, частично не доработанный ксрипты, главное что бы они НЕ использовали дополнительный библиотек расширений PHP и стороних программ типа вот этого http://vface.controlstyle.ru/
    если есть дайте хоть что нибуть а то бьсь уже который день((
     
  2. joefast

    joefast

    Заблокирован
    Регистр.:
    6 ноя 2007
    Сообщения:
    464
    Симпатии:
    74
    Автоматическое определение ключевиков:
    http://www.phpclasses.org/browse/file/15188.html

    Морфология:
    http://sourceforge.net/projects/phpmorphy/

    С первым кое-какой опыт есть: спорно, но жить можно.
    О втором много положительных отзывов, но сам не пробовал.
     
  3. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    первое реализовал, у меня это было сделано да только криво работало... поправил 1-й функцей))
    2 а за морф огромногое спасибо, это именно то что я искал.... возможно не все что хочу там есть или наверное еще не понял как этим пользоваться))
    ---
    ЗЫ тему можно закрывать
     
  4. rus-us

    rus-us

    Регистр.:
    8 сен 2007
    Сообщения:
    153
    Симпатии:
    72
    Поделись наработками, если не жалко ;)
     
  5. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    выводы

    я исходил из того что ключевое слово это наиболее часто встречаемое слово в тексте, а вот морфологию пока не догоню как прикрутить, знаю что нужно сделать но насчтет как, думаю))
    часть функция у меня одноименные, тк некоторым я просто не доверяю, были случаи некоректной их работы, если кто не хочет может использовать такие же как есть в
    и так
    PHP:
    <?php
    //debug
    function _print($str,$name='')
    {
    $print=false;
    echo
    "<pre align='left'>";
    echo 
    "<b>".$name."</b><br />";
    if(
    print_r($str)): $print=true; endif;
    echo
    "</pre>";
    return 
    $print;
    }
    //debug
    /**
    * Удаление символов переноса, возврата каретки, табуляции
    * @param string
    * @return string
    */
    function str_trim(&$str)
    {
    $str=trim($str);
    $str=str_replace("\n","",$str);
    $str=str_replace("\r","",$str);
    $str=str_replace("\t","",$str);
    return 
    $str;
    }

    function 
    divide(&$array,$min=5,$max=15)
    {
    $words=array();
    reset($array);
    foreach(
    $array as $string):
      if(
    strlen($string) >= $min && strlen($string) <= $max):
        
    $words[]=$string;    
      endif;
    endforeach;
    $array=$words;
    unset(
    $words);
    return 
    $array;
    }

    function 
    keywords($str,$count=15,$min=5,$max=15)
    {
    // ну тут ваш массив должен быть)) или     смотри коменты
    global $config;
    //---------------------<
    $keywords=array();
    $offset=0;
    $symbol=array(",",".",";",":","@","~","-","–","+","?","!","'",'"');
    $fastquotes=array( "\x27""\x22""\x60""\t","\n","\r",'"',"'""\\"'\r''\n'"/","{","}","[","]");
    $quotes=array( "\x27""\x22""\x60""\t","\n","\r","'",",",".","/","¬","#",";",":","@","~","[","]","{","}","=","-","+",")","(","*","&","^","%","$","<",">","?","!"'"' );
    $str=strtolower($str);
    $str=str_replace($symbol,' ',$str);
    str_trim($str);
    $str=preg_replace("#\<.+?\>|</.+?\>#is"," ",$str);
    $str=str_replace($fastquotes,'',str_trim($str));
    $str=str_replace($quotes,'',$str);
    $words=preg_split("/[\s]+/s",$str);
    divide($words,$min,$max);
    $words=array_count_values($words);
    arsort($words);
    $words=array_keys($words);
    $words=array_unique($words);
    $words=array_slice($words,$offset,$count);
    //если остальное не нужно то ...  и раскоментируйте сл строку
    //return $words=implode(", ",$words);
    //
    // тут нада свои ключи соощать
    $meta=preg_split("/[\^s,]+/s",str_trim($config['keywords']));
    $free=$count-count($meta);
    // тут нада заголовок тепередать
    $title=preg_split("/[\s]+/s",str_replace($quotes,'',$config['title']));
    divide($title,$min,$max);
    shuffle($title);

    if(
    count($title) <= $free):
      
    $limit=count($title);
    else:
      
    $limit=$free;
    endif;
    $title=array_slice($title,$offset,$limit);

    $keywords=array_merge($meta,$title,$words);
    $keywords=implode(", ",$keywords);
    return 
    $keywords;
    }

    //example| пример
    global $config;
    $fp=fopen('test.txt','r');    
    $filesize filesize('test.txt');
    $str=fread($fp,$filesize);
    fclose($fp);
    // в переменной $str обычный текст, можно стегами)) они все равно вырежутся
    //стандартные ключевые слова которые у вас на сайте
    // можно в функции указать свои переменные
    $config['keywords']='ключ, ключ1, ключ2';
    //заголовок текущей страницы
    $config['title']='мой сайт - заголовок текущей страницы';
    // что за переметры 1 текст который анализируем, 
    //2- колличестко слов которе неоходиом выдрать + 
    //еще слова будут из заголовка и своих ключевых слов
    //3- 6 мининмальная длина слова, ну нам не нужны слова типа ты, мне, да, и ,в и тп... (оптимально 5-6)
    //4- 15 макимальная длина слова, низнаю просто сдел вдуг захочу ограничить))
    $config['keywords']=keywords($str,25,6,15);

    _print($config,'KeyWords');

    echo 
    '<meta name="keywords" content="'.$config['keywords'].'">';
    //выводить  напимер так
    ?>
    что нужно еще сделать
    определить корень слова и прогнать по массиву, те в которых он встречается удалить приэтом подсчитывать это колличество...
    ---
    ну а если помечатать, то еще бы неплохо было что бы можно выделать словасочетания.. но это уже другое тут нужен мощный морфологический движок... скорее всего для таких случаев нужно будет использовать какой нибуть сервис или морф от яндекса ввиде шелы, кароче замутно... тк если юзать другой сервис, то он должен быть ооочнь быстрым, но увы невозможно...
     
  6. Neow15ard

    Neow15ard

    Регистр.:
    27 ноя 2008
    Сообщения:
    422
    Симпатии:
    188
    вот шикарная весчь по теме
     

    Вложения:

    chudochudak и Stripe нравится это.
Статус темы:
Закрыта.