Автоматические теги

Тема в разделе "Как сделать...", создана пользователем SocMaster, 12 янв 2013.

  1. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    213
    Симпатии:
    47
    У меня в движке реализована функция автоматических тегов. Но что б получить теги скрипт стучит на китайский сервер:conf:
    Естественно русские теги я не получаю, только англ и китай
    Ищу скрипт автоматической выборки тегов
    Вот код где стучит, может что еще придумать можно?
    PHP:
    if(!$_G['setting']['headercharset']) {
        @
    header('Content-Type: text/html; charset='.CHARSET);
    }
    $_G['inajax'] = 1;
     
    $subjectenc rawurlencode(strip_tags($_GET['subjectenc']));
    $messageenc rawurlencode(strip_tags(preg_replace("/\[.+?\]/U"''$_GET['messageenc'])));
    $data = @implode(''file("http://keyword.discuz.com/related_kw.html?title=$subjectenc&content=$messageenc&ics={$_G[charset]}&ocs={$_G[charset]}"));
     
    if(
    $data) {
        
    $parser xml_parser_create();
        
    xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
        
    xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
        
    xml_parse_into_struct($parser$data$values$index);
        
    xml_parser_free($parser);
     
        
    $kws = array();
     
        foreach(
    $values as $valuearray) {
            if(
    $valuearray['tag'] == 'kw' || $valuearray['tag'] == 'ekw') {
                if(
    PHP_VERSION '5' && CHARSET != 'utf-8') {
                    
    $kws[] = diconv(trim($valuearray['value']), 'utf-8');
                } else {
                    
    $kws[] = trim($valuearray['value']);
                }
            }
        }
     
        
    $return '';
        if(
    $kws) {
            foreach(
    $kws as $kw) {
                
    $kw dhtmlspecialchars($kw);
                
    $return .= $kw.' ';
            }
            
    $return trim($return);
        }
     
        
    showmessage($return'', array(), array('msgtype' => 3'handle' => false));
    } else {
        
    showmessage(' ''', array(), array('msgtype' => 3'handle' => false));
    }
    PHP:
    if($tid = @intval($_GET['tid'])) {
        
    $data C::t('forum_post')->fetch_threadpost_by_tid_invisible($tid);
        
    $subject $data['subject'];
        
    $message cutstr($data['message'], 500'');
        
    $pid $data['pid'];
    } else {
        
    $subject $_GET['subjectenc'];
        
    $message $_GET['messageenc'];
    }
     
    $subjectenc rawurlencode(strip_tags($subject));
    $messageenc rawurlencode(strip_tags(preg_replace("/\[.+?\]/U"''$message)));
    $data = @implode(''file("http://keyword.discuz.com/related_kw.html?ics=".CHARSET."&ocs=".CHARSET."&title=$subjectenc&content=$messageenc"));
     
    if(
    $data) {
     
        if(
    PHP_VERSION '5' && CHARSET != 'utf-8') {
            require_once 
    libfile('class/chinese');
            
    $chs = new Chinese('utf-8'CHARSET);
        }
     
        
    $parser xml_parser_create();
        
    xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
        
    xml_parser_set_option($parserXML_OPTION_SKIP_WHITE1);
        
    xml_parse_into_struct($parser$data$values$index);
        
    xml_parser_free($parser);
     
        
    $kws = array();
     
        foreach(
    $values as $valuearray) {
            if(
    $valuearray['tag'] == 'kw' || $valuearray['tag'] == 'ekw') {
                
    $kws[] = !empty($chs) ? $chs->convert(trim($valuearray['value'])) : trim($valuearray['value']);
            }
        }
     
        
    $return '';
        if(
    $kws) {
            foreach(
    $kws as $kw) {
                
    $kw dhtmlspecialchars($kw);
                
    $return .= $kw.',';
            }
            
    $return dhtmlspecialchars($return);
        }
        
    $return substr($return0strlen($return)-1);
     
        if(!
    $tid) {
            
    $_G['inajax'] = 1;
            include 
    template('forum/relatekw');
        } elseif(
    $kws) {
            
    loadcache('censor');
            
    C::t('forum_post')->update('tid:'.$_G['tid'], $pid, array(
                
    'tags' => implode(','$kws),
            ));
        }
    }
    Пожалуйста помогите..

    Подкиньте хотя бы скрипт подборки ключевиков
     
  2. Ewsen

    Ewsen

    Регистр.:
    26 июл 2008
    Сообщения:
    163
    Симпатии:
    59
    Для J1.5 я использую плагин Add Keywords 0.8RC3 http://extensions.joomla.org/extensions/news-display/articles-display/related-items/5701
    У него собственный алгоритм подбора ключевиков основанный на парсинге статьи при её сохранении и выборе наиболее часто встречающихся слов/словосочетаний.
     
    SocMaster нравится это.
  3. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    213
    Симпатии:
    47
    Ехх, не получается адаптировать, там какой то другой стиль кода
    Может выделите код который отвечает уже за генерацию? А то там много лишнего, я с джумлой не работал
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.547
    Симпатии:
    1.418
    Это скорее вредный совет, код в плагине довольно сложен для понимания начинающим кодером, а не начинающий такого вопроса и не задаст...

    За генерацию ключей отвечает функция generateKeywords, примерный алгоритм которой таков:
    Чистим текст статьи от знаков препинания, коротких слов, слов из блеклиста, предлогов (из массива на 782 строке, например, a, about, above, across, after, afterwards).
    преобразуем все символы текста в маленькие буквы strtolower
    разбиваем текст по пробелу $textArray = explode(" ", $text);
    подсчитываем количество слов $textArray = array_count_values($textArray);
    сортируем по убывающей arsort($textArray);
    и берём из полученного массива столько первых слов, сколько нам надо кеев (цикл на строке 1060, который обрывается, когда достигнуто желаемое количество if($i > $this->addkeyParams->keyCount) )
     
    SocMaster нравится это.
  5. ReBeL

    ReBeL Злобный старикашка

    Регистр.:
    3 май 2006
    Сообщения:
    1.561
    Симпатии:
    849
    Отсюда попробуй копать -
     
  6. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    мне в этом случае вообще кажется, что стоит сделать свой хендлер (на пхп) который будет принимать на вход два параметра $_GET : title, content
    и далее (использовав локальную базу) ищет по ключам запись, которая соответствует тайтлу и контенту, и в ответ отдаёт xml в нужном виде.
    если же таких ключей нет в базе, лезем на их сервер, достаём ответ, парсим (ели нужно) и записываем к себе в базу. Таким образом, через некоторое время в базе насобирается достаточное количество инфы, которую можна будет использовать. т.е., руссифицировать.
     
    SocMaster нравится это.
  7. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    если тебе это как либо поможет
    выдаёт
    Код:
    <?xml version="1.0" encoding="utf-8" ?>
    <total_response>
        <svalid>36000</svalid>
        <keyword>
        <info>
            <count>2</count>
            <errno>0</errno>
            <nextuptime>1291287160</nextuptime>
            <keep>0</keep>
        </info>
        <result>
            <item>
                <kw><![CDATA[long]]></kw>
            </item>
            <item>
                <kw><![CDATA[content]]></kw>
            </item>
        </result>
        </keyword>
    </total_response>
    тоесть, ответный формат приблизительно такой.
    линки на косоглазый сервер у тебя в двух примерах идентичны, да и набор параметров тот же.

    и кажется русский оно ни в зуб ногой :crazy:
     
  8. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    213
    Симпатии:
    47
    Это Я знаю, мне нужна система генерации тегов