forum.rastrnet.ru  

Вернуться   forum.rastrnet.ru > Компьютеры и всё, что с ними связано > Программируем

 Сообщения за день       Добавить альбом       Поиск      Правила форума  


Ответ
 
Опции темы Опции просмотра
Старый 26.01.2006, 21:33   #1
Ратибор
 
Регистрация: 20.05.2005
Сообщений: 2,620
Отправить сообщение для Ратибор с помощью ICQ
По умолчанию MySQL, разнородные данные, индексация

Необходимо разработать БД на основе MySQL, в которой будет храниться разнородная информация: .txt, .doc, .xls, etc... Необходимо реализовать полнотекстовый поиск по базе.
Вопрос: как это сделать? Бинарники хранить в blob-ах? Или в базе хранить толко ссылки на файлы и индексы? А как вообще быть с DOC-ами? Есть в MySQL (или в PHP) средства импорта/экспорта в DOC/XLS ?

Уважаемые программеры, посоветуйте чего дельного, пожалуйста...
__________________
[!!!] проблемы с сетью? 223-17-43
__________________
Мы баним с улыбкой. ©
Ратибор вне форума   Ответить с цитированием
Старый 26.01.2006, 22:11   #2
nolan
waiting for god
 
Аватар для nolan
 
Регистрация: 10.06.2005
Сообщений: 767
Отправить сообщение для nolan с помощью ICQ
По умолчанию

невыполнимо.
как ты планируешь на лету sql-запросом просканировать *.xls файл?

измени исходные условия, например, введи ключевые слова.
__________________
... и был я слеп, но теперь вижу.
nolan вне форума   Ответить с цитированием
Старый 26.01.2006, 22:43   #3
Ратибор
 
Регистрация: 20.05.2005
Сообщений: 2,620
Отправить сообщение для Ратибор с помощью ICQ
По умолчанию

Цитата:
Сообщение от nolan
невыполнимо.
как ты планируешь на лету sql-запросом просканировать *.xls файл?

измени исходные условия, например, введи ключевые слова.
Однозначно выполнимо. Только вот как...
Нет. Я не планирую сканировать "на лету". При загрузке документа в базу будет проводиться его индексация и в базу ляжет индекс данного документа, по которому в последствии и будет вестись поиск. Вот как эту индексацию делать. Есть способы кроме OLE, например? Может быть есть какие-то сторонние библиотеки/модули под мускл/пхп ?
__________________
[!!!] проблемы с сетью? 223-17-43
__________________
Мы баним с улыбкой. ©
Ратибор вне форума   Ответить с цитированием
Старый 27.01.2006, 00:01   #4
nolan
waiting for god
 
Аватар для nolan
 
Регистрация: 10.06.2005
Сообщений: 767
Отправить сообщение для nolan с помощью ICQ
По умолчанию

ммм, поясни пожалуйста, что ты подразумеваешь под "индексацией" документа?

не вполне представляю, как можно "проиндексировать" рабочую книгу экселя?
или как по ней затем выполнить полнотекстовый поиск?
сканирование таблицы "на лету", пожалуй, единственный приемлемый способ по скорости выполнения. если же ты хочешь дополнительными средствами разбирать блоб вне mysql - ну ты и получишь в час по чайной ложке. что касается расширений языка sql-92 - ну да, есть pl-sql. но даже и в нём я не припомню подобной функциональности, хотя это совершенно иной уровень.
__________________
... и был я слеп, но теперь вижу.
nolan вне форума   Ответить с цитированием
Старый 27.01.2006, 01:47   #5
Paul
Гость
 
Сообщений: n/a
По умолчанию

Если *.doc новый, 2003 - то пробем не будет, ибо это xml. Если старый - то да. Слыхал, что есть класс для работы с *.doc, но на perl. Если дело планируеться на винде (что мало вероятно для php), то есть скоростная утилитка zd2t.exe. Она у меня к фару прилеплена как просмоторшик. Для люни? Да должно быть чего, в крайнем случае (но до этого дело вряд ли дойдет) выдерни исходники и abiword к примеру. Но это вряд ли, экспортер должен быть.
*.xls - вроде есть бибка какая то. Непомню.
Индексировать бинарные файлы этих докуменов я смысла не вижу.

Где хранить - в бд или в катологах решать вам. Но как юзер скажу - в катологах в разы лучше. Нет лишней нагрузки на бд. Но зато нет зашиты от левых скачиваний.

Кароче, чё здесь тему разводить? Поисковики заплесневеют...
  Ответить с цитированием
Старый 28.01.2006, 17:42   #6
COBEHOK
Новичок
 
Регистрация: 17.08.2004
Сообщений: 780
По умолчанию

Цитата:
Сообщение от Ratibor
Необходимо разработать БД на основе MySQL, в которой будет храниться разнородная информация: .txt, .doc, .xls, etc... Необходимо реализовать полнотекстовый поиск по базе.
Вопрос: как это сделать? Бинарники хранить в blob-ах? Или в базе хранить толко ссылки на файлы и индексы? А как вообще быть с DOC-ами? Есть в MySQL (или в PHP) средства импорта/экспорта в DOC/XLS ?

Уважаемые программеры, посоветуйте чего дельного, пожалуйста...
Про полнотекстовый поиск можешь начинать читать отсюда http://linguist.nm.ru/ В MS SQL он уже встроен - если тебе не критичен движок БД, то можешь посмортеть в его сторону. Если использовать Interbase на Windows, то можно воспользоваться библиотекой полнотекстового поиска отсюда http://www.textolution.com/ftsib.asp

Экспорт/Импорт в офисные документы можно делать либо руками где угодно (форматы файлов можешь найти здесь http://www.wotsit.org/) либо под Windows: за деньги - http://wordcnv.com/dev.html, бесплатно - использовать конвертеры от MS, которые идут вместе с офисом или бесплатными смотрелками документов.

Как хранить? К тому моменту как ты разберешся с индексацией и полнотекстовым поиском обычного текста вопрос хранения документов у тебя решится сам собой

Цитата:
Сообщение от nolan
невыполнимо.
как ты планируешь на лету sql-запросом просканировать *.xls файл?
измени исходные условия, например, введи ключевые слова.
Выполнимо. Сначала индексируешь файл. Потом очень быстро ищешь по его индексу.
Цитата:
Сообщение от nolan
ммм, поясни пожалуйста, что ты подразумеваешь под "индексацией" документа?
Я думаю, он имел ввиду ту же операцию которую выполняют поисковики при индексации сайтов и документов.
COBEHOK вне форума   Ответить с цитированием
Старый 28.01.2006, 19:21   #7
nolan
waiting for god
 
Аватар для nolan
 
Регистрация: 10.06.2005
Сообщений: 767
Отправить сообщение для nolan с помощью ICQ
По умолчанию

Цитата:
Сообщение от COBEHOK
Выполнимо. Сначала индексируешь файл. Потом очень быстро ищешь по его индексу.
задам ещё раз вопрос - поясни пожалуйста, что ты подразумеваешь под "индексацией" документа? то есть, поясни в деталях. "ту же" - я честно говоря, не вполне представляю.

и ещё один вопрос, повторно -
не вполне представляю, как можно "проиндексировать" рабочую книгу экселя, да ещё и средствами сервера БД. как это можно проделать?

Цитата:
Сообщение от Pavel L
Если *.doc новый, 2003 - то пробем не будет, ибо это xml.
угу, конечно. ну имеешь ты в блобе 5мег xml-а, и твои действия? средствами сервера ты всё равно в нём искать не сможешь, будет необходим дополнительный слой, значит скорость уменьшится ГОРАЗДО.
__________________
... и был я слеп, но теперь вижу.

Последний раз редактировалось nolan; 28.01.2006 в 20:14.
nolan вне форума   Ответить с цитированием
Старый 28.01.2006, 19:54   #8
Ратибор
 
Регистрация: 20.05.2005
Сообщений: 2,620
Отправить сообщение для Ратибор с помощью ICQ
По умолчанию

Некоторые уточнения.

Платформа: Win.
Инструментарий: PHP+MySQL.
Входные данные: TXT, DOC, XLS, PDF (etc, may be...)
Требуется реализовать полнотекстовый поиск.

Соображения на данный момент такие. В БД грузится документ-исходник и его т.н. унифицированное(внутреннее) представление - простая текстовая форма. В принципе кое-какие консольные конвертеры я уже откопал. Далее вопрос уже такой: как реализовать поиск? Просто искать средствами MySQL по текстовым формам? Или попытаться соорудить собственный индекс, хранить его в базе и искать уже по нему?
__________________
[!!!] проблемы с сетью? 223-17-43
__________________
Мы баним с улыбкой. ©
Ратибор вне форума   Ответить с цитированием
Старый 28.01.2006, 21:33   #9
COBEHOK
Новичок
 
Регистрация: 17.08.2004
Сообщений: 780
По умолчанию

Цитата:
Сообщение от nolan
задам ещё раз вопрос - поясни пожалуйста, что ты подразумеваешь под "индексацией" документа? то есть, поясни в деталях. "ту же" - я честно говоря, не вполне представляю.
Под индексацией я понимаю простую вещь - это создание некой структуры ориентированной на быстрый поиск. Самую простую индексацию выполняют форумские движки (ты же не думаешь, что когда ты ищешь какую-то фразу на нашем форуме он перелопачивает всю базу?). Создается две таблицы: словарь слов и таблица вхождений, которая представляет собой ID слова, номер документа (сообщения), позицию в документе. При создании сообщения движок обновляет эти таблицы. Теперь в какие сообщения входит нужное слово не просто, а очень просто.

Следующий этап: для оптимизации таблиц вводится термин "стоп слово". Это слова не несущие содержательного смысла: предлоги, союзы, частицы и разные часто употребимые слова. Такие слова не заносятся.

Следующий этап: для поиска фраз и нечеткого поиска вводится понятие расстояния между словами.

Следующий этап: для поиска по всем словоформам в словарь слов добавляется инвариант слова. Т.е. слово без приставок, суффиксов и окончаний. Этим занимается морфологический анализатор или стеммер.

Следующий этап: вводится понятие ранга или веса документа, т.е. насколько этот документ полезен для пользователя. Ранг расчитывается по хитрой формуле, учитывающий "заточенность" документа под какую-то тему и "индекс цитируемости". Но этим как правило заморчиваюся поисковики масштаба предприятия как минимум (напр Google-Mini).
Цитата:
Сообщение от nolan
и ещё один вопрос, повторно -
не вполне представляю, как можно "проиндексировать" рабочую книгу экселя, да ещё и средствами сервера БД. как это можно проделать?
См. выше. Более того в MS SQL уже встроен механизм полнотекстового поиска. Ссылку на движок для Interbase я уже приводил.
Цитата:
Сообщение от nolan
угу, конечно. ну имеешь ты в блобе 5мег xml-а, и твои действия? средствами сервера ты всё равно в нём искать не сможешь, будет необходим дополнительный слой, значит скорость уменьшится ГОРАЗДО.
С чего ты это взял? А как по твоему работают индексы в БД? Это именно дополнительные слои, которые представляют собой B-деревья (каждый узел дерева - это отсортированный список из N элементов) Дерево пересобирается каждый раз когда когда ты меняешь что-то в базе. Причем сколько индексов в базе - столько и этих дополнительных структур. И никто не жалуется
Цитата:
Сообщение от Ratibor
Некоторые уточнения.
Платформа: Win.
Инструментарий: PHP+MySQL.
Входные данные: TXT, DOC, XLS, PDF (etc, may be...)
Требуется реализовать полнотекстовый поиск.
Замени MySQL на MS SQL или Interbase (или Firebird - он бесплатный) + FastTextSearch и твоя задача сводится к написанию/поиску конвертеров и оболочки.

Последний раз редактировалось COBEHOK; 28.01.2006 в 21:46.
COBEHOK вне форума   Ответить с цитированием
Старый 28.01.2006, 22:04   #10
Ратибор
 
Регистрация: 20.05.2005
Сообщений: 2,620
Отправить сообщение для Ратибор с помощью ICQ
По умолчанию

Цитата:
Сообщение от COBEHOK
Замени MySQL на MS SQL или Interbase (или Firebird - он бесплатный) + FastTextSearch и твоя задача сводится к написанию/поиску конвертеров и оболочки.
Было бы здорово услыщать аргументы в пользу такого решения и аргументы против того, что предложил я...
__________________
[!!!] проблемы с сетью? 223-17-43
__________________
Мы баним с улыбкой. ©
Ратибор вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появились данные первой четверки процессоров AMD FX, но пока не все RSS Железо - Новости 0 14.03.2011 19:50
Появились данные первой четверки процессоров AMD FX, но пока не все RSS Железо - Новости 0 14.03.2011 18:30
Появились данные первой четверки процессоров AMD FX, но ока не все RSS Железо - Новости 0 14.03.2011 18:00
MySQL Чатланин Прикладное программное обеспечение 3 14.11.2007 22:37


Текущее время: 01:00. Часовой пояс GMT +7.


Powered by vBulletin® Version 3.8.4 Patch Level 5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Форум открыт в июле 2004 г.
Кошки и котята Красноярска и Сибири Живой Мир Сибири