![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Олег13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.6.2010 Репутация: нет Всего: нет |
Всем доброго времени суток!
Посоветуйте как быть с поиском и выборкой строк и текстового файла большого размера. В общем у меня задача такая: у меня есть файл TXT (это англо-русский словарь), объем 7 Мб (120000 строк). Мне необходимо в нем производить поиск слов. Например вводишь слово "Dog", результатом поиска должны быть все строки в файле, которые сдержат слово "DOG". Я делаю так:
.........данный скрипт работает, но очень медленно (секунд 40-50 жду). Можно ли как-то ускорить поиск? Возможно надо производить поиск по другому принципу или улучшить рег. выражение? Подскажите, что можно сделать. Заранее спасибо. |
|||
|
||||
SkoobyDoo |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.10.2007 Репутация: нет Всего: нет |
Вроде 100500 тем таких было здесь!
запускаем
проверил на файле с 710000 строк, заняло 8 секунд Это сообщение отредактировал(а) SkoobyDoo - 5.7.2011, 10:44 |
||||
|
|||||
afiskon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Загрузите ваш словарь в память (120 000 строк - не так уж много) и производите поиск с помощью хэшей (%hash).
|
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Как хеш поможет найти часть слова?
Лучше так попробуйте
|
|||
|
||||
afiskon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Вы пытаетесь решить задачу, как вы ее поняли, а не как она ставилась. Читаем:
Где сказано про часть слова? Разбиваем строку на слова и создаем хэш слово -> указатель на строку. Вот и все решение. |
||||
|
|||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Если даже так, то ваше решение регистрозависимо.
Если посмотрите на решение автора, то поймете, что имелось ввиду. |
|||
|
||||
Олег13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.6.2010 Репутация: нет Всего: нет |
Большое спасибо всем за помощь. Все получилось, теперь поиск не занимает и 5 сек. Оказалось, что данную задачу можно решить без использования циклов. Воспользовался решением Pfailed.
А то я уже собирался разбить данный файл на мелкие файлы (чтобы в каждой части содержались слова на одну конкретную букву) и потом при старте скрипта, определять первую букву введенного искомого слова и таким образом переходить для поиска к файлу содержащему слова на данную букву. Заморочисто бы получилось. В общем еще раз всех благодарю за помощь. |
|||
|
||||
afiskon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Что мешает приводить ключи к нижнему регистру?
На хэшах он не будет занимать и 0.1 сек. |
||||
|
|||||
Олег13 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 28.6.2010 Репутация: нет Всего: нет |
afiskon, а ты бы не мог примерчик привести как организовать поиск через Хеши? Я бы хотел рассмотреть этот вариант, разобраться что и как работает. Ты писал выше, что надо строку на слова разбить, а потом создать указатель на нее. Как это сделать? Если не трудно, можно небольшой рабочий примерчик выложить? Я с хешами и указателями еще не сталкивался в своей недолгой практике программирования на PERL, так что я в этой области профан. Спасибо заранее.
|
|||
|
||||
afiskon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 31.3.2011 Где: Россия, Москва Репутация: нет Всего: 4 |
Как-то так:
использование:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |