![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Индексация *.doc файлов
Glum © (2006-05-05 10:30:00)Здравствуйте!
Мне необходимо проиндексировать кучу *.doc файлов для дальнейшей организации поиска по ним.
Какие компоненты мне можно использовать для чтения *.doc файлов и записи данных в MySQL?
Сергей М. (2006-05-06 12:31:00) [21]
> Jeer © (06.05.06 12:02) [13]
> может идти поскольку row и col - уже дает местоположение.
row и col - местоположение в документе, а не в файле, надеюсь, это не вызывает сомнение.
Какие row и col могут быть в бинарномфайле, каковым является файл вордового документа ..
А ведь автор ведет речь именно об индексации doc-файлов !
Да, можно "в лоб" просмотреть содержимое этого бин.файла и определить наличие в нем той или иной последовательности (она там действительно будет фигурировать, если вообще имеется). Но это будет лишь факт присутствия модели поиска, не более того.
Ну а для того чтобы построить индекс по вхождениям модели поиска в текст документа(те самые row и col), нужна работа именно с документом, а не с файлом. А уж выбор средств для работы с вордовым документом - это другой вопрос ... Хоть вод это будет хоть что-то альтернативное ..
Сергей М. (2006-05-06 12:22:00) [22]
> Shirson © (06.05.06 11:56) [12]
> Слово "Delphi" содержится
> на позициях 7863, 34555
> файл "Help.doc"
Что ты подразумеваешь под "позицией" в *.doc файле ?
> то, что тут написано - ахинея
С каких пор ахинеей является факт того, что файл документа MSWord не имеет простой текстовый формат ?
> в *.doc файле можно отпозиционировать ЛЮБОЙ символ, если
> понадобится
*.doc-файл и документ MSWord - вовсе не одно и тоже.
Позиция символа в *.doc-файле не имеет ничего общего с позицией того же символа в соответствующем документе MSWord.
Это тоже ахинея ?
> Проще, использую Word-сервер, залезать в *.doc файлы и работать
> с ними по своему усмотрению
Или я тебя не понял или ты сам себе противоречишь, говоря в [8] якобы о малой эффективности использования Ворда для решения задачи поиска в своих же документах.
> два момента - Смысл и Время
Смысл прямой - использовать по возможности более эффективный алгоритм поиска в документах Ворда, нежели тот что реализован в самом Ворде.
А время - на то и существуют готовые реализации таких алгоритмов, зачастую они Freeware и OpenSource.
Shirson (2006-05-06 12:21:00) [23]Зависит от задачи, как уже поминалось. Готовые вещи не всегда удовлетворяют частным требованиям.
Jeer (2006-05-06 12:16:00) [24]Anatoly Podgoretsky © (06.05.06 12:08) [14]
Просто не все знают как с ним работать, а то и о его наличии.
Деньги тоже не помешают, а что будет плохо работать - какая разница:(
Anatoly Podgoretsky (2006-05-06 12:08:00) [25]Пишем конкурента Микрософтовскому Index Server
Jeer (2006-05-06 12:02:00) [26]Сергей М. © (06.05.06 10:18) [9]
> В случае с *.doc-форматом ни о каком "местоположении фрагмента"
> не может идти и речи, потому что
может идти поскольку row и col - уже дает местоположение.
Shirson (2006-05-06 11:56:00) [27]
> Сергей М. © (06.05.06 10:18) [9]
> Индекс, насколько я себе представляю, содержит инф-цию не
> только о наличии того или иного фрагмента, но и "местоположении"
> этого фрагмента отн-но выбранной "базы", для того чтобы
> можно было осуществлять быстрое позиционирование на начало
> фрагмента.
И да и нет.
Слово "Delphi" содержится в файлах "Help.doc", "User.doc"
Это - индекс.
Файл "Help.doc" находится на третьем снизу сидюке, на шпинделе "Programming"
Это - тоже индекс.
Слово "Delphi" содержится
на позициях 7863, 34555
файл "Help.doc"
сд 3
шпиндель "Programming"
И это индекс.
> В случае с *.doc-форматом ни о каком "местоположении фрагмента"
> не может идти и речи, потому что *.doc-формат не является
> классическим текстовым форматом.
Сорри, но то, что тут написано - ахинея.
Из-за (само)вольного определения индекса, вылезли и проблемы.
(кстати, для справки, в *.doc файле можно отпозиционировать ЛЮБОЙ символ, если понадобится)
> Максимум что можно получить
> и хранить в БД - факт наличия или отсутствия фрагмента в
> таких-то *.doc-документах.
Вы хотели сказать "минимум"?
У меня используется полная индексация по всем словам (с подсчётом количества упоминаний и позициями). Что там можно сделать "максимум", я даже загадывать не берусь, возможностей море.
>Кто ж заставляет использовать для этой цели именно Word ?
Дайте догадаюсь... Заказчик. ТЗ. Политика.
>Понятно что этот монстр не слишком эффективно справляется с задачей поиска. Но со структурированными хранилищами в формате ворда (формат этот не представляет большого секрета) с неменьшим успехом можно работать и своими прогр.средствами ! И вот их-то как раз и можно "заточить" именно под эффективный поиск фрагментов.
Угу. Только два момента - Смысл и Время.
Время на написания нового или затачивание существующего стороннего модуля под свои нужны и смысл сего действа.
Проще, использую Word-сервер, залезать в *.doc файлы и работать с ними по своему усмотрению. Мало того, что это проще, это еще и решает проблему совместимости. Что бы не выдумал МикроСофт в плане форматов, нас это не будет штырить ни разу.
>TUser © (06.05.06 11:21) [10]
>Можно еще воспользоваться программой antiword и перевести текст в текстовый файл. И там уже читать, индексировать ...
Чтобы перевести текст (всмысле из word?) в текстовый файл, не обязательно пользоваться какими-либо сторонними программами.
Кроме того, не стоит забывать, что doc файлы могут содержать широченный спектр форматирования + мультимедия.
А работать с doc файлом как с обычным тектовым не составляет никаких проблем, если установлен Word. А если не установлен, то проще и дешевле его установить :)
Сергей М. (2006-05-06 11:31:00) [28]
> TUser © (06.05.06 11:21) [10]
Тогда уж в XML..
Есть немало неплохих инструментов для поисковой работы в XML-формате
TUser (2006-05-06 11:21:00) [29]Можно еще воспользоваться программой antiword и перевести текст в текстовый файл. И там уже читать, индексировать ...
Сергей М. (2006-05-06 10:18:00) [30]
> Shirson © (06.05.06 09:26) [8]
Индекс, насколько я себе представляю, содержит инф-цию не только о наличии того или иного фрагмента, но и "местоположении" этого фрагмента отн-но выбранной "базы", для того чтобы можно было осуществлять быстрое позиционирование на начало фрагмента.
В случае с *.doc-форматом ни о каком "местоположении фрагмента" не может идти и речи, потому что *.doc-формат не является классическим текстовым форматом. Максимум что можно получить и хранить в БД - факт наличия или отсутствия фрагмента в таких-то *.doc-документах.
> Вот попробуйте, как-нибудь, а потом поделитесь впечатлениями
Кто ж заставляет использовать для этой цели именно Word ?
Понятно что этот монстр не слишком эффективно справляется с задачей поиска. Но со структурированными хранилищами в формате ворда (формат этот не представляет большого секрета) с неменьшим успехом можно работать и своими прогр.средствами ! И вот их-то как раз и можно "заточить" именно под эффективный поиск фрагментов.
Shirson (2006-05-06 09:26:00) [31]Сергей М, а вы пробовали осуществлять вордом э... "эффективный поиск по своим(вордовским) документам.", при условии, что этих документов > 10000?
Вот попробуйте, как-нибудь, а потом поделитесь впечатлениями. И про FTS на русском и про скорость и про всё остальное. Это раз.
Два - распишите методу обработки результатов этого самого поиска. Т.е. у вас есть клиент, который должен получить результат посика по файлам ворда. Весь механизм можете расписать?
То что хочет сделать Glum, более чем понятно. Как по сути вопроса, так и по сути "а зачем оно".
Могу влёт привести самый простой пример. Есть электронная библиотека, в которой 50000 книг, свёрстанных в ворде. Нужен механизм поиска по словам в этой библиотеке.
Реализация:
Каждая книга, попадая в библиотеку, проходит обработку "индексатором", который индексирует слова в этом файле (в MySQL). Теперь, при поиске слов по библиотеке, поиск будет производиться средствами СУБД в себе самой и выдавать ссылки на вордовские файлы.
Где при этом хранятся файлы, как они хранятся и на чём они хранятся - сути не имеет НИКАКОЙ. Хоть на шпинделе с сидюками, хоть на стримере, хоть на винте, хоть в BLOB поле самой базы.
P.S. Я, в своё время время, решал очень похожую задачу, только посложнее, порядка на два. На несколько сот тысяч текстов, с многопотоковыми конвейерами индексации, словарями, визуальными инструментами поиска и пр. ужасами.
Сергей М. (2006-05-06 09:01:00) [32]
> Glum (05.05.06 17:37) [5]
> Мне нужно организовать поиск по файлам
А сами файлы-то где будут храниться ? В той же базе ?
В любом случае для работы с doc-файлами требуется Word (где он при этом будет работать, на стороне сервера или на стороне клиента - не суть как важно), а Word'у никакие "индексы" не нужны - он сам знает как осуществлять эффективный поиск по своим документам.
Shirson (2006-05-06 08:32:00) [33]>Glum (05.05.06 17:37) [5]
>Мне нужно организовать поиск по *.doc файлам, а для этого их нужно прочесть, и меня интересует с помощью какого компонента это можно сделать.
usesComObj;
...
varV:Variant;
begin
V:=CreateOleObject('Word.Application');
V.Documents.Open(FileName:=<FileName.doc>);
...
end;
Glum (2006-05-05 17:37:00) [34]2 Плохиш
Спасибо. Буду копать в этом направлении.
2 Сергей М.
Я вроде всё достаточно понятно изложил. Мне нужно организовать поиск по файлам, а для этого их нужно прочесть, и меня интересует с помощью какого компонента это можно сделать.
Сергей М. (2006-05-05 11:26:00) [35]
> Glum (05.05.06 10:59) [2]
И как это связано с "индексированием *.doc-файла" ?
Что считать "словом" ?
Плохиш (2006-05-05 11:11:00) [36]
> Мне необходимо проиндексировать кучу *.doc файлов для дальнейшей
> организации поиска по ним.
Бесполезная информация
> Какие компоненты мне можно использовать для чтения *.doc
> файлов и записи данных в MySQL?
Здесь 2 вопроса для конференции "Начинающим". Т.к. версия делфи не указана, то отвечаю для Д7: 1й вопрос - компоненты с закладки "Server"; 2й вопрос - компоненты с закладок "ADO" или "dbExpress".
Glum (2006-05-05 10:59:00) [37]2 Сергей М.
Алгоритм примерно такой: читается файл, составляется список всех слов не короче 3х символов, встречающихся в нём и помещается в БД MySQL. И так со всеми файлами.
Далее скрипт на PHP должен будет искать по этой базе по запросу пользователя, но это уже другая история :)
Сергей М. (2006-05-05 10:50:00) [38]
> проиндексировать кучу *.doc файлов
Что это значит ?