| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Регулярные выражения > вывод поисковиком |
| Автор: gcc 30.12.2009, 01:36 | ||
| хотел спроcить вопрос по поводу построения поиска есть
но text_co выводит очень длинные текст, как обрезать текст, точнее как найти поисковые слова в тексте обрезать и вывести - 15 симвлов и +15 символов между поисковым словом короче, сложно сформулировать вопрос, но как обрезать красиво текст и показать его, так как делает google или yandex? |
| Автор: gcc 30.12.2009, 18:07 |
| т.е. подскажите как это можно обработать, что-то варианты не могу найти.. можно ли весь текст в массив занести через splite? и там порезать и лишнеее выбросить? должно быть решение, чтобы велосипед не писать? |
| Автор: gcc 3.1.2010, 19:56 | ||||||
| написал, но есть трудности при поисковой фразе в 5 букв выполняется около 10 сек .и грузит процессор
на странице 10 элементов и кажный медленно выполняется около | 6.877156s | каждый можно ли как-то ускорить или сделать чтобы не грузил процессор? алгоритм: есть текст который нашла MySQL и есть поисковые слова сам текст занимает много где-то 30 000 сиволов (или или меньше пускай 10 000) нужно найти в каком участке найболее совпадений, и чтобы "короткий участок" вывести пользователю.... нужно поделить этот текст по 25 символов и занести в массив всего получиться около 500 элементов массива есть модуль которые быстро ищет чем база данных (так говорит автор) Quantum::Superpositions http://ru.wikipedia.org/wiki/%D0%9A%D0%B2%D0%B0%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D1%81%D1%86%D0%B5%D0%BF%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C http://www.opennet.ru/docs/RUS/perl_obzor/files/quantium.html по этому каждые слова еще разделить на массив (получиться двух мерный массив) === поисковая фраза входит которая входит $word_all $content - текст вывод результат это return $search;
вот это eigenstates (Ква́нтовая сце́пленность ( «запу́танность, перепу́танность»)) не захотела работат, это поиск максимального значения в массиве по этому сделал другой класс: вызывается - @f = $c->model('Sorting')->super_max( $found );
при прохождении по массиву кокло 200-500 элементов - медленно можно ли как-то ускорить или сделать чтобы не грузил процессор? как это по другому можно сделать? |
| Автор: gcc 4.1.2010, 03:22 | ||||
| я поменял if ( index( any(@$i), $_ ) >= 0 ) { на if ( $va && $word && $va =~ /$word/i ) { + добавил цикл оно стало чуть помягче!!! ==== но все равно как-то притормаживает что еще можно сделать?? я внизу привул окончательный вариант
я 5 сек. все занимает out_hash - это метод в котором ищется самое большое значение массива (цифра) my @f = eigenstates( any(@$found) >= all(@$found) ); всего элементов около 200 и оно выполняется 2 сек, это номрально ??
как можно ускорить? тексты скорости я привел вверху в этом сообщении |
| Автор: gcc 5.1.2010, 06:37 | ||||||
| вообщем сделал еще оптимизировал.... вот эта штука index(any(@$i), $_) >= 0 поиск в большой базе, медленно работала, заменил на if ( $va && $word && $va =~ /$word/i ) { + удалил дубликаты там где оно совпало большое количество раз по поже покажу полный рабочий вариант..... но вот все таки этот участок кода при большом количестве поисковых фраз выполняется 0.3 сек вот этот участок выполняется один раз 0.3с если добавить еще больше текста и поисковых фраз, то можеи быть до 1с, а всего 10 таких надо обработать... (хотя по сокрости сложно сказать, может быть оно и номрально, текст же не можеи быть через вычайно большой и поисковая фараза большим предложением) НО может быть можно ускорить? $aa2 - это двух мерный массив 100-500 элементов @{ $aa2->[$co] } - массив 25 элементов, "разбитая" строка по кускам @$words - 1-20 элементов поисковая фраза
Добавлено @ 06:42 вот полностью
вызывается - @f = $c->model('Sorting')->super_max( $found );
Добавлено через 12 минут и 28 секунд кстати, тема по-моиму больше относиться к "Общие вопросы", перенесите пожалуйста |
| Автор: gcc 7.1.2010, 01:38 | ||||||
| вот работает http://www.x0.org.ua/search/content/off/oracle%20%D1%81%D1%80%D0%B0%D0%B7%D1%83 часть
@f = $c->model('Quantum')->super_max($found);
по большой статье в 2 слова: (довольно быстро)
еще можно чтобы 1) откорректировать поиск если не правильно ввелось слово с раскладкой... 2) и исправить орфографию на ходу... Сахор = Сахар 3) и т.д. как у яндекса часть из этого может Sphinx, но другое надо писать... решил его использовать |