Dehumanizer
@Dehumanizer

Проектирование и разработка системы обработки информации?

Привет всем,


Мне необходимо написать достаточно сложное приложение по обработке информации. В нескольких словах, имеется набор документов некоторой сферы, допустим — медицинские книги/документы/т.д. Приложение должно по возможности больше «понимать» весь набор документов, чтобы пользователи смогли быстро и эффективно выполнять поиск по базе, не имея знаний в указанной области. Звучит как поисковик, может так оно и есть, но приложение «десктопное» и основной проблемой является проектирование базы данных. Приветствуются советы по архитектуре.


Дело в том, что сам я программист, но неуверенно себя чувствую в проектировании больших приложении и/или интеллектуальных систем. Прощу извинить, если вопрос неуместный.


Приветствуются любые замечания, советы и «решения». Прощу не приводить ссылок на книги по паттернам проектирования или Фаулер, еще и по поиску не стоит, хотя если есть книга или ресурс, который очень поможет, буду очень рад за помощь.


Я не спрашиваю как написать приложение, всетаки это моя забота), но сам не имею прямого доступа к специалистам и не могу задавать вопросы или сениорам или другим программистам. Думаю — Хабр по этому поводу хорошо подходит, посколько здесь есть очень много профессиональных разработчиков.


Заранее большое спасибо.
  • Вопрос задан
  • 2784 просмотра
Решения вопроса 1
@egorinsk
Зачем проектировать свой, плохой поиск (потому что не так-то просто найти специалистов, способных сделать хороший, они все в Гугле давно работают), когда может быть можно, например купить яндекс-сервер для локальной сети? Или он вам не подойдет?

Вот смотрите, например, вы пишете поиск по медицинским книгам. Там часто один и тот же термин, во-первых, может по-разному писаться, на латыни или на русском, через букву е или э, и т.д. Плюс, некоторые авторы называют вещь одним словом, а другие — другим. И вряд ли вы сделаете нормальный поиск с учетом таких вещей.

Или разбиение на слова. Многие системы при индексации разбивают текст на слова. Разбивать ли текст по знаку «минус»? будет ли находиться слово, разбитое переносом: «обык-новенный»? Будет ли разбито на части слово RMT-2600? И будет ли поиск по нему работать? Будут ли находиться слова с опечатками? «обыкновеный» и «Обыкновенный»? А поиск цифр (кодов), если в тексте он в виде 3-123-124, а пользователь вводит без дефисов?

Отдельная песня — поиск фамилий. Johansonn, Йохансон, Иогансон, Йохансонн. Обработка юникодных символов вроде ́́́a?

Сможете ли вы индексировать например DOC, PDF и другие форматы, которые используются.

А сделать поиск, который ищет точные вхождения, разбивая текст по пробелам, приводя в нижний регистр и делая примитивный стемминг, ну это любой может, только вот не уверен, что он будет давать точные результаты.

Также, есть проблема ранжирования. Искомое слово встречается в 300 документах. Естественно, все 300 никто смотреть не будет, будут смотреть первые несколько десятков, вопрос, как ранжировать эти 300 документов, чтобы вначале шли более релевантные?

Если в запросе несколько слов, надо ли искать каждое слово отдельно? Или обязательно присутствие всех слов на определенном расстоянии?

Вот смотрите, сколько сложнорешаемых проблем выскакивает после 10 минут раздумий.

Я бы понял, если у вас задача распилить какой-нибудь бюджет, но вы пишете «чтобы пользователи смогли быстро и эффективно выполнять поиск по базе, не имея знаний в указанной области» — такой поиск просто так не сделать. Надо делать разные варианты, изучать фидбек, сохранять неудачные поиски, делать эксперименты, тесты, и т.д.

А то, что пишут выше, про LIKE % и Windows Search, вообще ничего, кроме огорчения не вызывает.

И вам не нужны какие-то знания по архитектуре и базам данных на этом этапе. Очевидно, что должен быть какой-то компонент, извлекающий структурированный (разбитый на поля) текст из исходных документов, компонент, индексирующий их, компонент, ищущий по созданному индексу и компонент, отображающий найденные документы в удобном виде, подсвечивающий слова в них (если получится).

То, что в вашем вопросе не упомянуты слова «индекс», «ранжирование» и прочее, меня настораживает.

Вы, кстати, можете посмотреть, как устроена посиковая система sphinx, но я сомневаюсь, что сфинкс сам по себе способен решить описанные мной проблемы. Он скорее способен выполнить (средненько) роль индексирующего и ищущего компонентов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
solver
@solver
Странно. Нужна инфа по проектированию информационной системы, но Фаулера не приводить…
Он то как раз поможет спроектировать систему.

А вообще вам надо читать про Базы знаний. Скорее всего это то, что вам надо.
Ответ написан
@PavelN
Из того, что сразу приходит на ум:
0. выделить какие у документа будут свойства (метаданные). Т.е. кроме названия и автора должны быть, например, тип (статья, книга...), уровень сложности, рубрики или темы к которым относится, язык, год издания, актуально/не актуально, кто/когда добавил в систему, содержание, краткое описание
1. Продумать интерфейс, т.к. мне кажется в данной задаче ты будешь «плясать» именно от этого. А вообще в этой задаче советую зайти, например, на google и попытаться какой-нибудь документ по какой-нибудь конкретной области и попросить это сделать пользователей. И «допросить» что у них получилось, что нет и что бы хотели увидеть и как искать.
2. Предусмотреть роли/группы пользователей: пользователь, администратор, эксперт,…
3. Для индексации можно/нужно на только запросы типа Like '%', но и стандартные компоненты типа Windows Search (есть API, но я не пользовался им) или Full Text Search от SQL Server (если база расположена в нем)
4. Думаю стоит предусмотреть в архитектуре/интерфейсе какие-нибудь: облако тегов, наиболее часто используемые запросы, лучшие ссылки (редактируются пользователем), отметки типа «мне нравится» для документов, избранное
5. Нужно создать удобный рубрикатор (документ может входить в несколько рубрик)
6. Нужно создать список типа «с чего начать»(по предметной области), советы по поиску + документация
7. Механизмы подмены слов
8. нужны инструменты администратора — например чего люди ищут, как, сколько результатов выдется, какие доументы просматривают
9. Нужен механимз обратной связи. Например очень вжный документ находится где-то в конце поиска, и пользователь (эксперт) подсказывает администратору, что нужно «поднять» документ
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы