Роберт
Аналитик
Поиск по огромным газетным статьям
Может кому приходилось делать что-то подобное - есть огромное количество больших текстовых фрагментов (в моём случае газетные статьи) которые хранятся в базе и по которым необходимо производить поиск. Но поиск спецефический - не просто такак в поисковике по любому слову , а по Имени и Фамилии!
Что бы народ понял разницу - приведу пример:
Вчера троя собутыльников: Сергей Иванов, Дмитрий Петров и Андрей Сидоров совершили преступление и напились.
Если в простой базе данных запросить Дмитрий Иванов - то она найдёт эту статью , а ведь на самом деле в этой статье нету такого человека! Просто система заметила:
...троя собутыльников: Сергей Иванов, Дмитрий Петров и Андрей...
Тоесть фамилия и имя взяты совершенно от разных людей.
Вот в чём фишка!
Я расскажу как делается сейчас у меня. Я разбиваю статьи на две таблицы. В одной таблице записана сама статья и всякая дополнительная информация , типа: дата выхода , в какой газете печаталось , какому региону относится газета , рубрика (Спорт или Криминальная хроника) и т.д. А во сторую таблицу закидываю этуже статью , но уже разбитую по кусочкам (разделителями являются все знаки припинания ".,!?()- , а также " и " (пробел И пробел). И каждый из этих фрагментиков имеет индекс той статьи из которой он брался. Так например данный примерчик будет разбит на три части:
1) Вчера троя собутыльников: Сергей Иванов
2) Дмитрий Петров
3) Андрей Сидоров совершили преступление и напились.
И когда кто-то ищит по фамилии и имени - поиск происходит во второй таблице , а как результат поиска - на экран выводится первая таблица с полным текстом.
Может кто-то занимался такими же задачами или видил какие-то статьи на эту тему? Подскажите , а то очень много закавырок...
Например в статье может быть написано:
Братья Андрей и Денис Ивановы построили...
В этом случае при поиске по Андрею Иванову система не найдёт его , ведь в базу попадут:
1) Братья Андрей
2) Денис Иванов построили...
Может кто-то может подсказать что-то по поводу склонений имён и фамилий? Пока я просто стараюсь во второй таблице (где разбитые фразы) приводить все имена и фамилии к именительному падежу (как вы это наверно уже заметили в предыдущем примере , где в статье было:
Денис Ивановы построили...
а в базу попало:
Денис Иванов построили...
Это очень помогает , но в тоже время когда выводится текст на экране - я не могу сделать корректную подсветку если искали по критерию "Иванов" , база нашла во сторой таблице это слово (потому что оно там подправлено) , а в первой таблице и сиходной статьёй был не "Иванов" , а "Ивановы". Приходится отнимать 1-2 буквы искать через регулярные выражения по вхождению Иван(.+?) , чтобы подсветить это (а как следствие попадпются и Ивановны , и город Иваново , и Иванчинко , и тому подобное...
Но бог с ними - склонениями. Есть ещё огромное количество вопросов. Например - как правильно производить сам поиск в базе данных? Через FULLTEXT индексы? Или есть ещё более быстрые методы поиска? Или это вообще надо делать не в базе данных а есть какие-то другие средства?
И очень интересно - каким образом можно находить опечатки? Когда вводится допустим Наталья вместо Наталия или путаюстя буквы местами? (может кто-нибудь меня ткнёт в сылку по этой теме?)
Если у кого-то были подобные задачи или может что-то посоветовать или видел где обсуждение - поделитесь информацией...
Может кому приходилось делать что-то подобное - есть огромное количество больших текстовых фрагментов (в моём случае газетные статьи) которые хранятся в базе и по которым необходимо производить поиск. Но поиск спецефический - не просто такак в поисковике по любому слову , а по Имени и Фамилии!
Что бы народ понял разницу - приведу пример:
Вчера троя собутыльников: Сергей Иванов, Дмитрий Петров и Андрей Сидоров совершили преступление и напились.
Если в простой базе данных запросить Дмитрий Иванов - то она найдёт эту статью , а ведь на самом деле в этой статье нету такого человека! Просто система заметила:
...троя собутыльников: Сергей Иванов, Дмитрий Петров и Андрей...
Тоесть фамилия и имя взяты совершенно от разных людей.
Вот в чём фишка!
Я расскажу как делается сейчас у меня. Я разбиваю статьи на две таблицы. В одной таблице записана сама статья и всякая дополнительная информация , типа: дата выхода , в какой газете печаталось , какому региону относится газета , рубрика (Спорт или Криминальная хроника) и т.д. А во сторую таблицу закидываю этуже статью , но уже разбитую по кусочкам (разделителями являются все знаки припинания ".,!?()- , а также " и " (пробел И пробел). И каждый из этих фрагментиков имеет индекс той статьи из которой он брался. Так например данный примерчик будет разбит на три части:
1) Вчера троя собутыльников: Сергей Иванов
2) Дмитрий Петров
3) Андрей Сидоров совершили преступление и напились.
И когда кто-то ищит по фамилии и имени - поиск происходит во второй таблице , а как результат поиска - на экран выводится первая таблица с полным текстом.
Может кто-то занимался такими же задачами или видил какие-то статьи на эту тему? Подскажите , а то очень много закавырок...
Например в статье может быть написано:
Братья Андрей и Денис Ивановы построили...
В этом случае при поиске по Андрею Иванову система не найдёт его , ведь в базу попадут:
1) Братья Андрей
2) Денис Иванов построили...
Может кто-то может подсказать что-то по поводу склонений имён и фамилий? Пока я просто стараюсь во второй таблице (где разбитые фразы) приводить все имена и фамилии к именительному падежу (как вы это наверно уже заметили в предыдущем примере , где в статье было:
Денис Ивановы построили...
а в базу попало:
Денис Иванов построили...
Это очень помогает , но в тоже время когда выводится текст на экране - я не могу сделать корректную подсветку если искали по критерию "Иванов" , база нашла во сторой таблице это слово (потому что оно там подправлено) , а в первой таблице и сиходной статьёй был не "Иванов" , а "Ивановы". Приходится отнимать 1-2 буквы искать через регулярные выражения по вхождению Иван(.+?) , чтобы подсветить это (а как следствие попадпются и Ивановны , и город Иваново , и Иванчинко , и тому подобное...
Но бог с ними - склонениями. Есть ещё огромное количество вопросов. Например - как правильно производить сам поиск в базе данных? Через FULLTEXT индексы? Или есть ещё более быстрые методы поиска? Или это вообще надо делать не в базе данных а есть какие-то другие средства?
И очень интересно - каким образом можно находить опечатки? Когда вводится допустим Наталья вместо Наталия или путаюстя буквы местами? (может кто-нибудь меня ткнёт в сылку по этой теме?)
Если у кого-то были подобные задачи или может что-то посоветовать или видел где обсуждение - поделитесь информацией...