powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск в абзаце
25 сообщений из 27, страница 1 из 2
Поиск в абзаце
    #34903202
Kukolev_A_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте уважаемые, помогите кто может!
Есть таблица данных в Access (не суть важно):

Структура:

ID - Счетчик
DocName - Текстовый
ItemNumber - Числовой
ItemWord - Текстовый

Описание задачи: В DocName пишется название документа, в ItemNumber - номер абзаца в документе
в ItemWord - слово из абзаца. Таким образом я сформировал Таблицу для индексации слов в документе с учетом номера абзаца. Проблема в том, что никак не могу составить корректный SQL запрос. Собственно задача состоит в том, что имея два или более слов необходимо составить запрос, который бы возвращал названия документов, в которых эти слова встречаются в одном абзаце.

Все перепробовал - знаний видимо не хватает. Подскажите, если у кого есть идеи по этому поводу. Заранее благодарен!
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34903251
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Like?
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34903256
Kukolev_A_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LIKE годится только если в ItemWord поместить весь абзац...
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34903267
Baykin Ilya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял вам совершенно правильно подсказали.
.....LIKE('%MY_WORD%')..... где символы '%' обозначают, что перед и после ключевого слова может находится любое количество любых символов.
Естественно, надо как-то смотреть каким символом разделяется абзац и там уже считать сколько таких символов мы прошли-грубо говоря это и будет номер абзаца.
Или мы не так вас поняли?

А можно, ради интереса, попросить вас описать вашу задачу более подробно? Для чего это будет использоваться? Достаточно необычная задача, на мой взгляд...
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34903282
Kukolev_A_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посняю: Задача - поиск документа по следующему критерию: нахождение двух или более слов внутри одного и того же абзаца. Таким образом возникает вопрос как представлять сам документ... Первым вариантом было как раз следующее представление - в 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 - то есть искать документы, в которых искомые слова встречаются в одном абзаце!
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34903354
Tosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю поможет или нет, но, в свое вермя, мне очень сильно помогла эта ссылка
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34903679
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, записей получилось больше, но благодаря индексации запросы типа ItemWord = "Слово" выполнялись быстрей чем ItemWord LIKE "%Слово%"... Вот собственно и задача нарисовалась - как объединить запросы для разных значений ItemWord - то есть искать документы, в которых искомые слова встречаются в одном абзаце!

Как-то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select НомерДокумента from СловоВДокументе 
where СловоВДокументе.Слово='первоеСлово'
         and
         exists (select * from СловоВДокументе ВтороеСлово
               where ВтороеСлово.Слово =  'второе Слово'
                        and
                        ВтороеСлово.НомерДокумента = СловоВДокументе.НомерДокумента
                        and
                        ВтороеСлово.НомерАбзаца = СловоВДокументе.НомерАбзаца
         )
               group by НомерДокумента
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34904732
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа
Код: plaintext
1.
2.
3.
4.
5.
select distinct docname from
(select count(*) ,DocName, ItemNumber 
 from concordance
 where ItemWord in (<искомый список слов>)
 having count(*)  = <длина искомого списка слов>
)
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34905065
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR , слова автору нужны все сразу и в одном документе+абзаце. А не "некоторые из" списка...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34905108
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне понравилась идея с количеством слов. Как вам такой вариант?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Select distinct 
   DocName 
From
   table as a
Where
   (Select
       count(*)
    From
       table as b
    Where
       b.DocName=a.DocName 
       and
          bItemNumber=a.ItemNumber 
          and
             b.ItemWord in (<искомый список слов>)  
   )=<количество слов>
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34905140
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelR , извиняй. А ты просто пропустил
Код: plaintext
Group by DocName, ItemNumber
Или как?

Интересно чей запрос отстреляется быстрее?...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34905261
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автору я бы посоветовал еще добавить поле CountWords - сколько раз данное слово встречается в данном абзаце.
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34905471
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot krvsa] ModelR , извиняй. А ты просто пропустил
Код: plaintext
Group by DocName, ItemNumber
Или как?
Факт:(
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34905945
Kukolev_A_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, обязательно потестирую все запросы. Но пока могу сказать одно - запрос belugin'a выполнялся ну уж очень долго - виной тому огромное количество слов в моей базе...
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34906020
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kukolev_A_AСпасибо всем, обязательно потестирую все запросы. Но пока могу сказать одно - запрос belugin'a выполнялся ну уж очень долго - виной тому огромное количество слов в моей базе...


Индекс {слово, документ, абзац} имеется?
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34906025
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще надо первое слово, наверное, самое селективное сделать...
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34906439
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kukolev_A_Aзапрос belugin'a выполнялся ну уж очень долго
Это решение т.с. "в лоб", переборов много...
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34926257
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм. Вообще-то стандартный однопроходный алгоритм с группировкой по абзацам.
Пересматриваются все записи, содержащие нужные слова.
То есть, затараты = сумма(количество записей с каждым словом, по каждому слову). Быстрее не получится.
Потом еще придется просмотреть отобранный список документов.
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34926757
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, все приведенные запросы не учитывают возможность повторения слов

На мой взгляд:

Структура:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table docs
(
    ID int identity,
DocName varchar( 500 ),
ItemNumber int,
ItemWord varchar( 500 )

)


Тестовые данные:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 1 	doc1	 1 	w1
 2 	doc1	 1 	w2
 3 	doc1	 2 	w1
 4 	doc1	 2 	w3
 5 	doc2	 1 	w1
 6 	doc2	 1 	w4
 7 	doc2	 2 	w2
 8 	doc3	 1 	w1
 9 	doc3	 1 	w2
 10 	doc3	 1 	w1
 11 	doc4	 1 	w1
 12 	doc4	 1 	w4
 13 	doc4	 1 	w1
 14 	doc3	 3 	w1
 15 	doc3	 3 	w2

Запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
begin

declare @words table (word varchar( 500 ) )

insert @words values ('w1')
insert @words values ('w2')

declare @count int

set @count =  2 

	select distinct DocName
	from 
		(		
			select distinct DocName, ItemNumber, ItemWord
				From
					docs inner join @words on ItemWord = word
		) first 
	group by DocName, ItemNumber
	having count(*) =  @count


end


Результат

Код: plaintext
1.
doc1
doc3
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34926835
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drevИМХО, все приведенные запросы не учитывают возможность повторения слов
У автора такая структура данных что у него не будет записей с одним словом в одном абзаце и документе...
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34927083
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa drevИМХО, все приведенные запросы не учитывают возможность повторения слов
У автора такая структура данных что у него не будет записей с одним словом в одном абзаце и документе...

Really?:)



14) использование водных объектов (водопользование) - использование различными способами водных объектов для удовлетворения потребностей Российской Федерации, субъектов Российской Федерации, муниципальных образований, физических лиц, юридических лиц;
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34927251
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, у автора не предусмотрен ни счетчик одинаковых слов в абзаце, ни позиция слова внутри абзаца. Так что одно или несколько одинаковых слов в абзаце равно породят единственную запись в конкордансе.
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34927401
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRТочнее, у автора не предусмотрен ни счетчик одинаковых слов в абзаце, ни позиция слова внутри абзаца. Так что одно или несколько одинаковых слов в абзаце равно породят единственную запись в конкордансе.

Смотрите, проблема в другом. Если мы ищем слова w1, w2 и в абзаце w1 встретилось два раза - то по логике Вашего запроса мы выберем этот документ, а если w1 встретилось два раза и w2 - один раз - не выберем.

Понятно?
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34927523
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял, у автора, для слова/абзаца/документа появляется единственная запись если это слово хотябы раз встретилось в этом абзаце, этого документа.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
Поиск в абзаце
    #34927552
drev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaНасколько я понял, у автора, для слова/абзаца/документа появляется единственная запись если это слово хотябы раз встретилось в этом абзаце, этого документа.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT

Странно. Не заметил, где это сказано :(
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поиск в абзаце
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]