![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
GrigoriyFomin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 16.11.2010 Репутация: нет Всего: нет |
Подскажите плз, алгоритм, а может и готовое решение:
Есть куча HTML страниц, сжатых по Zlib и запихнутых в базу. Необходимо создать быстрый поиск. Как мен видится решение - нужно создать индекс: список слов и встречаемость его в документах. Так вот отсюда вопрос - как составить список слов? - то есть поубирать из индекса предлоги, междометия и проц. ненужный мусор (точнее, где такой перечень слов можно нарулить) - и как наиболее оптимально организовать хранение такого индекса - БД, текстовый файл, бинарный файл или еще как-то. Думаю, структура БД будет такой 1 таблица ID:integer; Word:String, затем соббсно сам индекс: ID_Word:integer; ID_Doc:integer;PosInDoc:string Заранее спасибо за наводки, ссылки и проч. |
|||
|
||||
niteo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
Поискового бота пишешь? ;)
Собирай все слова которые найдешь. Сделай табличку вида: id; word; length; PartSpeech; IndexFreq; HTMLName; многа многа полей Делай все в какой нить MySQL Проиндексируй ее по полям, которые тебе понадобятся. Потом вот это: http://lmgtfy.com/?q=%D0%91%D0%B0%D0%B7%D0...%BB%D0%BE%D0%B2 Ну и дальше делаешь что тебе надо... --------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
|||
|
||||
niteo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
--------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
|||
|
||||
DYUMON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 17.6.2006 Где: Новосибирск Репутация: нет Всего: 3 |
когда то доводилось делать поиск по базе html страничек с подстветкой найденого в странице. делал через регулярные выражения. а сами старницы хранил в базе в обычном хтмл .
|
|||
|
||||
GrigoriyFomin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 16.11.2010 Репутация: нет Всего: нет |
Мне нужна концепция организации поиска
Сечас делаю так - в одном массиве перепробовал движки БД для хранения индекса - очень медленно получается, поэтому храню в тнативных массивах и потоках 1. список типа TStringList - Задача - типа поисковика для документов предприятия, которые в ХТМЛ, стандартные средства применять нельзя. список стоп слов, которые будут выбрасываться из поискового запроса и при индексации будут игнорироваться 2. список сло с спривоенными им ID (есть bдея хранить не список слов, а результат вычисляемой на основании слова ХЭЩ-функции , но функции не нашел подходяещй, да и смысла скорее всего нет 3. собственно индекс слов в виде записи
Работа со списками идет в виде банального прогона по элементам массива Поругайте идею и предложите оптимизацию как для построения индекса, так и для его дальнейшего использования |
|||
|
||||
DYUMON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 321 Регистрация: 17.6.2006 Где: Новосибирск Репутация: нет Всего: 3 |
хз я хранил данные в таблице sqlite . примерно 10000 записей поиск занимал несколько секунд.
|
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
это очень долго
|
|||
|
||||
niteo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
Создай словарь (список всех возможных словообразований) по всем таблицам (хтмл файлам). Словарь будет конечен (при добовлении новой таблички, обновляй его). Затем к каждой таблице добавь описание (id_word, position_word). Сделаешь все это в MySQL имхо поиск будет доли сенкунды.
--------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
|||
|
||||
GrigoriyFomin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 16.11.2010 Репутация: нет Всего: нет |
отказался от движка БД. Статистика такая - слов и словоформ - тыщ 400, позиций в слове35 млн - создание индекса средствами БД - жутко долго, щас занимаюсь максимальной оптимизацией, особенно касаемо копирования памяти, сортировки, сравнения строк.
Вот, хочу предлжить на критику следующую функцию, аналог ansicomparetext . Регистр всегда верхний, поэтому преобразований в этом месте нет. Параметры такие, потому что на вход удобнее без преобразований типов подавать именно такие.
И ещеникто не поделится опытом работы с морфологией? Как искать без учета падежей и склонений, спряжений? |
|||
|
||||
niteo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
Все же, попробуйте обратить внимание на БД. Идея такая: Есть у вас допустим набор таблиц, вы сделали как я написал уже выше. А вновь добовляемые данные будете складывать в другую табличку, соответственно индекс будет строиться очень быстро (пока там снова не скопится большое колличество данных), но периодически можно скидывать данные из новой таблички в старую, а новую затем подчищать... По поводу функции, нет выхода по условию завершения строки asst Я бы сделал этот кусок кода на asm. Это сообщение отредактировал(а) MetalFan - 26.10.2011, 13:43 --------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
|||
|
||||
GrigoriyFomin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 16.11.2010 Репутация: нет Всего: нет |
Я видел, что глючит иногда функция и отказался от нее в пользу библиотечной функции сравнения двух pchar строк. С асмом не дружу. Помнится, попадалась как-то библа - набор аналогов функций со строками и памятью, оптимизированных под конкретный проц, но скока щас не искал - не могу таких найти - может с ними пошустрее была б работа. По поводу БД - я отказался от БД и разница в скорости возросла в десятки раз!!!!! Думаю, такое ускорение быстродействия стоит того, чтоб все ручками прописывать
![]() |
|||
|
||||
niteo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 23.11.2006 Где: Брянск Репутация: нет Всего: 1 |
По поводу функции, есть вот такая StrComp
А по поводу БД, вы ее не правильно "готовите". --------------------
Мне чужого лишнего не нада.Ешь ананасы, рябчиков жуй,день твой последний приходит, буржуй... |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
QStrings, но к сожалению только для Ansi строк. +1 -------------------- There are always someone smarter than you... |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |