|
|
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые, помогите кто может! Есть таблица данных в Access (не суть важно): Структура: ID - Счетчик DocName - Текстовый ItemNumber - Числовой ItemWord - Текстовый Описание задачи: В DocName пишется название документа, в ItemNumber - номер абзаца в документе в ItemWord - слово из абзаца. Таким образом я сформировал Таблицу для индексации слов в документе с учетом номера абзаца. Проблема в том, что никак не могу составить корректный SQL запрос. Собственно задача состоит в том, что имея два или более слов необходимо составить запрос, который бы возвращал названия документов, в которых эти слова встречаются в одном абзаце. Все перепробовал - знаний видимо не хватает. Подскажите, если у кого есть идеи по этому поводу. Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2007, 23:03 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
LIKE годится только если в ItemWord поместить весь абзац... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 00:00 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Насколько я понял вам совершенно правильно подсказали. .....LIKE('%MY_WORD%')..... где символы '%' обозначают, что перед и после ключевого слова может находится любое количество любых символов. Естественно, надо как-то смотреть каким символом разделяется абзац и там уже считать сколько таких символов мы прошли-грубо говоря это и будет номер абзаца. Или мы не так вас поняли? А можно, ради интереса, попросить вас описать вашу задачу более подробно? Для чего это будет использоваться? Достаточно необычная задача, на мой взгляд... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 00:16 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Посняю: Задача - поиск документа по следующему критерию: нахождение двух или более слов внутри одного и того же абзаца. Таким образом возникает вопрос как представлять сам документ... Первым вариантом было как раз следующее представление - в DocName записать название док-та, затем в ItemNumber номер абзаца, и далее в ItemWord - сам текст абзаца. Пример Документ: ВОДНЫЙ КОДЕКС РОССИЙСКОЙ ФЕДЕРАЦИИ Принят Государственной Думой 12 апреля 2006 года ............................................................................ и т.д. ........................................ Таблица: DocName ItemNumber ItemWord 11111.rtf 1 ВОДНЫЙ КОДЕКС РОССИЙСКОЙ ФЕДЕРАЦИИ 11111.rtf 3 Принят 11111.rtf 4 Государственной Думой 11111.rtf 5 12 апреля 2006 года И все было неплохо, пока не оказалось, что документов порядка 10000, абзацев соответственно ~10^7 и LIKE тут работал очень медленно. Далее я пытался записывать в ItemWord уже не абзацы, а отдельные слова! Да, записей получилось больше, но благодаря индексации запросы типа ItemWord = "Слово" выполнялись быстрей чем ItemWord LIKE "%Слово%"... Вот собственно и задача нарисовалась - как объединить запросы для разных значений ItemWord - то есть искать документы, в которых искомые слова встречаются в одном абзаце! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 00:34 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
не знаю поможет или нет, но, в свое вермя, мне очень сильно помогла эта ссылка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 02:57 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Да, записей получилось больше, но благодаря индексации запросы типа ItemWord = "Слово" выполнялись быстрей чем ItemWord LIKE "%Слово%"... Вот собственно и задача нарисовалась - как объединить запросы для разных значений ItemWord - то есть искать документы, в которых искомые слова встречаются в одном абзаце! Как-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 10:11 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
типа Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 14:17 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
ModelR , слова автору нужны все сразу и в одном документе+абзаце. А не "некоторые из" списка... ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 15:53 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Мне понравилась идея с количеством слов. Как вам такой вариант? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 16:04 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
ModelR , извиняй. А ты просто пропустил Код: plaintext Интересно чей запрос отстреляется быстрее?... ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 16:11 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Автору я бы посоветовал еще добавить поле CountWords - сколько раз данное слово встречается в данном абзаце. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 16:41 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
[quot krvsa] ModelR , извиняй. А ты просто пропустил Код: plaintext Факт:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 17:31 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, обязательно потестирую все запросы. Но пока могу сказать одно - запрос belugin'a выполнялся ну уж очень долго - виной тому огромное количество слов в моей базе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 21:47 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Kukolev_A_AСпасибо всем, обязательно потестирую все запросы. Но пока могу сказать одно - запрос belugin'a выполнялся ну уж очень долго - виной тому огромное количество слов в моей базе... Индекс {слово, документ, абзац} имеется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 22:55 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
еще надо первое слово, наверное, самое селективное сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2007, 23:00 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Kukolev_A_Aзапрос belugin'a выполнялся ну уж очень долго Это решение т.с. "в лоб", переборов много... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2007, 09:53 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Гм. Вообще-то стандартный однопроходный алгоритм с группировкой по абзацам. Пересматриваются все записи, содержащие нужные слова. То есть, затараты = сумма(количество записей с каждым словом, по каждому слову). Быстрее не получится. Потом еще придется просмотреть отобранный список документов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 18:54 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
ИМХО, все приведенные запросы не учитывают возможность повторения слов На мой взгляд: Структура: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Тестовые данные: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Результат Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 06:13 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
drevИМХО, все приведенные запросы не учитывают возможность повторения слов У автора такая структура данных что у него не будет записей с одним словом в одном абзаце и документе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 08:30 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
krvsa drevИМХО, все приведенные запросы не учитывают возможность повторения слов У автора такая структура данных что у него не будет записей с одним словом в одном абзаце и документе... Really?:) 14) использование водных объектов (водопользование) - использование различными способами водных объектов для удовлетворения потребностей Российской Федерации, субъектов Российской Федерации, муниципальных образований, физических лиц, юридических лиц; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 10:12 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Точнее, у автора не предусмотрен ни счетчик одинаковых слов в абзаце, ни позиция слова внутри абзаца. Так что одно или несколько одинаковых слов в абзаце равно породят единственную запись в конкордансе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 10:52 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
ModelRТочнее, у автора не предусмотрен ни счетчик одинаковых слов в абзаце, ни позиция слова внутри абзаца. Так что одно или несколько одинаковых слов в абзаце равно породят единственную запись в конкордансе. Смотрите, проблема в другом. Если мы ищем слова w1, w2 и в абзаце w1 встретилось два раза - то по логике Вашего запроса мы выберем этот документ, а если w1 встретилось два раза и w2 - один раз - не выберем. Понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 11:21 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
Насколько я понял, у автора, для слова/абзаца/документа появляется единственная запись если это слово хотябы раз встретилось в этом абзаце, этого документа. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 11:42 |
|
||
|
Поиск в абзаце
|
|||
|---|---|---|---|
|
#18+
krvsaНасколько я понял, у автора, для слова/абзаца/документа появляется единственная запись если это слово хотябы раз встретилось в этом абзаце, этого документа. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT Странно. Не заметил, где это сказано :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2007, 11:49 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=112&tid=1544206]: |
0ms |
get settings: |
7ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 332ms |

| 0 / 0 |
