Как писал AlexA Если говорить конкретно относительно данной задачи, то решение может быть в сохранении CRC основных форм слов данного текста. Тогда вам не придется "шерстить" файл, да и считать CRC. Достаточно будет сравнивать CRC форм слов запроса с CRC форм слов данного текста. Уф, вроде бы все.
Спасибо, идея хорошая. Отправлена в мозг на обработку :)
Хотя, отвлекаясь от постановки задачи, скажу, что и решение экономить память на 15Мб также мне не совсем понятно. А не пробовали память докупить? Если, конечно, сервер - ваш, если не ваш, то все-таки дешевле купить сервер и поставить у провайдера.
Сервер не мой. И тратиться я не собираюсь, так как для меня это скорее игрушка, нежели работа.
Как писал AlexA Есть словарь, преобразованный через CRC32 (кстати, может словообразование досталось "бесплатно" для экономии объема словаря?), есть слова запроса, также в виде CRC32. И есть тексты документов, где надо найти эти слова запроса. Расходы на CRC32 при этом чересчур
Ну надо же, про меня вспомнили!!!
Большая часть веремни уходит не на расчет CRC, а на поиск CRC основной формы слова.
Я храню таблицу CRC-CRC в виде Б-дерева, его размер составляет около 15Mb. На одно слово требуется от 5 до 10 сравнений (а данные хранятся на диске), а таких слов на странице может быть 100 штук. Шерстить 15 мегабайтный файл не очень быстро. Держать его в памяти не имеет смысла, так как поиск производится не более 200 раз в день, а серверу есть чем занятся и без поиска.
Как писал AlexA Другой вопрос, зачем вообще идти по пути CRC32-преобразованния словаря , но уже пройдено 2 года и назад вернуться, возможно, трудно.
Я в этой проблеме особо не разбирался. Какие есть другие варианты ?
У меня уже есть участок текста, который необходмо вывести в результатах, и я уже знаю, что найденное слово начинается, скажем, с 15-ой позиции.
Наример: поисковая фраза "тестовый поиск"
Выводится цитата:
"... в этом случае при тестовомпоиске не было найдено требуемых документов, но при изменении поискового запроса ..."
Первое слово "тестовом" выделить не проблема, я точно знаю, что оно там есть, и начинается с 15 позиции.
Но проверить надо и остальные слова. Ведь еще надо выделить слово "поиске" и "поискового".
Словарь хранится в виде CRC32 основной формы, и CRC32 слова. По CRC32 слова я нахожу CRC32 основной формы и сраниваю с CRC32 основной формы слов из поисковго заросва - совпадает - выделяю.
Можеть есть можно выделить как-то без обращения к словарю ?
Если говорить конкретно относительно данной задачи, то решение может быть в сохранении CRC основных форм слов данного текста. Тогда вам не придется "шерстить" файл, да и считать CRC. Достаточно будет сравнивать CRC форм слов запроса с CRC форм слов данного текста. Уф, вроде бы все.
Спасибо, идея хорошая. Отправлена в мозг на обработку :)
Хотя, отвлекаясь от постановки задачи, скажу, что и решение экономить память на 15Мб также мне не совсем понятно. А не пробовали память докупить? Если, конечно, сервер - ваш, если не ваш, то все-таки дешевле купить сервер и поставить у провайдера.
Сервер не мой. И тратиться я не собираюсь, так как для меня это скорее игрушка, нежели работа.
Есть словарь, преобразованный через CRC32 (кстати, может словообразование досталось "бесплатно" для экономии объема словаря?), есть слова запроса, также в виде CRC32. И есть тексты документов, где надо найти эти слова запроса. Расходы на CRC32 при этом чересчур
Ну надо же, про меня вспомнили!!!
Большая часть веремни уходит не на расчет CRC, а на поиск CRC основной формы слова.
Я храню таблицу CRC-CRC в виде Б-дерева, его размер составляет около 15Mb. На одно слово требуется от 5 до 10 сравнений (а данные хранятся на диске), а таких слов на странице может быть 100 штук. Шерстить 15 мегабайтный файл не очень быстро. Держать его в памяти не имеет смысла, так как поиск производится не более 200 раз в день, а серверу есть чем занятся и без поиска.
Другой вопрос, зачем вообще идти по пути CRC32-преобразованния словаря , но уже пройдено 2 года и назад вернуться, возможно, трудно.
Я в этой проблеме особо не разбирался. Какие есть другие варианты ?
Простите, а как вы собираетесь разрешать коллизии?
никак.
У меня уже есть участок текста, который необходмо вывести в результатах, и я уже знаю, что найденное слово начинается, скажем, с 15-ой позиции.
Наример: поисковая фраза "тестовый поиск"
Выводится цитата:
"... в этом случае при тестовом поиске не было найдено требуемых документов, но при изменении поискового запроса ..."
Первое слово "тестовом" выделить не проблема, я точно знаю, что оно там есть, и начинается с 15 позиции.
Но проверить надо и остальные слова. Ведь еще надо выделить слово "поиске" и "поискового".
Словарь хранится в виде CRC32 основной формы, и CRC32 слова. По CRC32 слова я нахожу CRC32 основной формы и сраниваю с CRC32 основной формы слов из поисковго заросва - совпадает - выделяю.
Можеть есть можно выделить как-то без обращения к словарю ?
Господа, это не читать.
Глупый был когда писал. Умирает буквально на паре гигов.
Я рекомендую почитать Кнута. У него целый том есть - Сортировка и Поиск (2-ой, если я не ошибаюсь) а особенно про Б-Деревья.
Я считал CRC32 слова и использовал их, как ключ в Б-Дереве, а слова я вообще не использовал.
Господа, это не читать.
Глупый был когда писал. Умирает буквально на паре гигов.
Я рекомендую почитать Кнута. У него целый том есть - Сортировка и Поиск (2-ой, если я не ошибаюсь) а особенно про Б-Деревья.
Я считал CRC32 слова и использовал их, как ключ в Б-Дереве, а слова я вообще не использовал.