Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Индексация *.doc файлов


Страницы:   1 2

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 файлов


Что это значит ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо