Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимальный код составления кейвордов, составил код, ищу слабые места 
V
    Опции темы
ArNic
Дата 21.1.2010, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Т.к. была необходимость составления кейвордов налету, я написал генератор кейвордов, который динамично формирует список кейвордов.
Вот пример кода:
Код

<?php
    $text=$_REQUEST['text'];
    $text=preg_replace('![\s]!',' ',$text);
    preg_match_all('![^а-яА-Я]+([а-яА-Я]{4,555}?)[^а-яА-Я]+!u',$text,$text);
    $text=$text[1];
    foreach($text as $v){$keyword[$v]++;}
    arsort($keyword);
    array_slice($keyword,0,20);
    $keyword=array_keys($keyword);
    print implode(" ", $keyword);
?>

А вот вводная форма:
Код

<form method=post>
    <textarea name="text" style="width:1000px;height:500px;"><?=$_REQUEST['text']?></textarea>
    <input type="submit"/>
</form>

Если есть идеи по улучшению или критика по производительности, жду.

Для тех, у кого посещает мысль "нафига он нужен?" 
Так как код "пятиминутка" код не трудно было написать, а выложил я его чтобы обнаружить отрицательные стороны в способе программирования, с точки зрения производительности.

Это сообщение отредактировал(а) ArNic - 21.1.2010, 00:58
PM MAIL ICQ   Вверх
ArNic
Дата 21.1.2010, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Жду еще сутки и считаю код "самым быстрым и самым оптимальным на свете".  smile 
PM MAIL ICQ   Вверх
skyboy
Дата 21.1.2010, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



недостатки алгоритма:
0. игнорирует аббревиатуры короче 4 символов: СБУ, ФБР, ИИ.
1. нет нормализации(собаки, собака, собаке)
2. нет возможности работать с несколькими словами(Кривой Рог, метод Гаусса, автомат Калашникова, Большой адронный коллайдер)
3. нет работы со стоп-словами(которые не должны ни в коем случае попасть в "ключевые" - всякие "вследствие", "короче", даже если у них высокая частота)
4. 20 самых частовстречаемых слов - не лучшая идея. к сожалению, не помню точно, но надо выбирать срез ближе к середине частотного ряда, а не с краю. 
Если 1,2,3 могут замедлить алгоритм, то 0 и 4 вполне можно внедрить в имеющийся без потери производительности.

PM MAIL   Вверх
ArNic
Дата 21.1.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Цитата(skyboy @ 21.1.2010,  11:58)
недостатки алгоритма:
0. игнорирует аббревиатуры короче 4 символов: СБУ, ФБР, ИИ.
1. нет нормализации(собаки, собака, собаке)
2. нет возможности работать с несколькими словами(Кривой Рог, метод Гаусса, автомат Калашникова, Большой адронный коллайдер)
3. нет работы со стоп-словами(которые не должны ни в коем случае попасть в "ключевые" - всякие "вследствие", "короче", даже если у них высокая частота)
4. 20 самых частовстречаемых слов - не лучшая идея. к сожалению, не помню точно, но надо выбирать срез ближе к середине частотного ряда, а не с краю. 
Если 1,2,3 могут замедлить алгоритм, то 0 и 4 вполне можно внедрить в имеющийся без потери производительности.

Решил вопрос по пунктам 0,3,4

Возникла проблема с преобразованием в нижний регистр, а точнее это не получается с латиницей функцией php, поэтому попробовал решитьрегуляркой. Думаю что регулярка составлена неверно. Но это вообще не критично. Можно просто удалить строку.

Озадачен пунктом 1 и 2. Не сталкивался ни разу, склоняюсь к мысли что простого решения нет. Если будет время ими займусь, пока что получилось вот что: (изменения помечены желтым)
Код

    $text=@$_REQUEST['text'];
    $text=preg_replace('![\s]!u',' ',$text);
    $text=preg_replace('![А-Я]!u','![а-я]!u',$text); # пробовал решить преобразование в нижний регистр не получилось :(
    preg_match_all('![^а-яА-Я]+([а-яА-Я]{2,}?)[^а-яА-Я]+!u',$text,$text);
    $text=$text[1];
    $exept=array('нет','не','ни','то','даже','со','если','но','без');
    foreach($text as $v){
        if(!in_array($v,$exept)){ 
             $keyword[$v]++;
        }
    }
    if($keyword){
        arsort($keyword);
        $ck=count($keyword); # count keywords
        $hck=round($ck/2); # half count keywords
        $stK=($hck>10)?$hck-10:0; #start keyword
        $fnK=($hck>10)?$hck+10:$ck; #finish keyword
        array_slice($keyword,$stK,$fnK);
        $keyword=array_keys($keyword);
        print implode(" ", $keyword);
    }


Жду критики, замечаний, отзывов.

Это сообщение отредактировал(а) ArNic - 21.1.2010, 13:31
PM MAIL ICQ   Вверх
Simpliest
Дата 21.1.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: 1
Всего: 3



Цитата(ArNic @  21.1.2010,  12:21 Найти цитируемый пост)
Озадачен пунктом 1

http://www.php.ru/forum/viewtopic.php?p=185111#185184


--------------------
user posted image
PM   Вверх
ArNic
Дата 21.1.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Цитата(Simpliest @ 21.1.2010,  14:02)
Цитата(ArNic @  21.1.2010,  12:21 Найти цитируемый пост)
Озадачен пунктом 1

http://www.php.ru/forum/viewtopic.php?p=185111#185184

Прочел все. Понял, что без словаря никак не сделать универсальный нормализатор.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0880 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.