Как стать автором
Обновить

Математическая поисковая система с визуальным вводом формул

Время на прочтение3 мин
Количество просмотров2.5K
Почти полгода назад я написал на хабре статью о проекте математической поисковой системы uniquation.ru. Тогда была получена конструктивная критика, которая помогла улучшить проект.

С тех пор проект претерпел множество изменений, главное из которых — визуальный ввод формул — теперь, чтобы найти информацию о каком либо математическом объекте, необязательно знать его представление в формате TeX.





О влиянии хабра


В развитии проекта было несколько переломных точек, первая — это участие в Imagine Cup 2009, когда он был представлен публике, второй — запуск альфа-версии и анонс на хабре. После этого события со мной связался создатель dxdy.ru, и в результате сотрудничества появилась специализированная версия поиска, которая ищет только по этому форуму — uniquation.ru/dxdy, а на самом форуме — форма поиска.

В свою очередь, после прочтения статьи на хабре Опыт создания решебника на базе MediaWiki, уже я связался с автором и предложил сотрудничество — результат тот же: специализированная версия с поиском по pluspi.org — uniquation.ru/pluspi и форма поиска на сайте решебника.

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

Об изменениях


Самые важные изменения с момента предыдущего запуска: добавление визуального ввода формул и группировка одинаковых по смыслу формул в выдаче. Первое позволяет пользоваться системой, не зная теха, а второе — получить нужный результат быстрее, так как теперь при запросе '\sin(x+y)' первая страница поисковой выдачи не замусорена формулами вида: '\sin(a+b)' и '\sin(x+y)' — и содержит, скорее всего, искомую формулу синуса суммы.

Кроме этого на сайте появился интерактивный учебник по языку TeX, который может быть полезен тем пользователям, которые не используют windows7.

О технологиях


Основной подход при разработке системы в выборе технологий очень прост — писать на том, на чем умею, и стремиться избежать vendor lock-in. В данном случае это язык C# и две реализации платформы: mono и .net framework.

К сожалению, исключить vendor lock-in на клиенте не удалось, так как сносный компонент для визуального ввода формул доступен в виде COM-компонента windows 7, а единственной платформой RIA с доступом к COM является silverlight 4. Его выход около месяца назад позволил быстро реализовать ввод формул.

В текущий момент идет работа над тем, чтобы сделать серверную часть распределенной. Модификация работы с базой данных позволила свести любую операцию к чтению или записи по ключу, что прекрасно ложиться на DHT. Пока используется MySQL, но, возможно, в будущем это будет что-нибудь из мира NoSQL.

Другим аспектом (помимо базы данных) создания распределенной системы является реализация общения между машинами. Стремление держаться подальше от vendor lock-in наложило табу на WCF и MSMQ, а желание минимизировать воздействие на будущее неудачными архитектурными решениями сегодня спровоцировало выбор независимых систем кодирования и передачи сообщений. В качестве кодирования была выбрана Protocol Buffers от Google — конце концов Uniquation — тоже поисковая система:) Проблема заключалась в том, что Google предоставляет API только для C++, Java и Python, а сторонние библиотеки являются слишком молодыми и тяжелыми. В качестве решения я впервые использовал IKVM.NET — программу, которая одной командой превращает java's jar в .net's dll. Данное приложение уже сейчас позволяет сконвертировать проект уровня eclipse)

О будущем


Будущее — это хорошо забытое прошлое.

Данная фраза работает и здесь. Еще в комментариях к прошлому посту была высказана идея о поиске не конкретного решения, а класса решений, совместимых с данным запросом — это позволит развить поисковую систему математической информации в CAS. Мы выступали на втором Hackday'е с этой идеей и заняли второе место, данный прототип назывался GaloisWiki (его анонс на hackday2).

Процесс работы над GaloisWiki:
image
Теги:
Хабы:
Всего голосов 101: ↑89 и ↓12+77
Комментарии38

Публикации

Истории

Ближайшие события