вторник, 28 января 2014 г.

ChWiSe.Net: Проект химического поиска по Википедии

О чём проект

Хочу рассказать о chwise.net - созданном мной недавно вебсайте, предназначенном для поиска статей о химических веществах в википедии. Особенностью данного сервиса является то, что поддерживается как полнотекстовый поиск по ключевым словам, так и поиск по структурной похожести молекул. В настоящее время проиндексированы только лишь статьи на английском языке. Если проект будет пользоваться интересом, то он получит дальнейшее развитие в сторону поиска статей и на других языках.

Итак, что представляет собой описываемый сервис? На главной и единственной странице можно увидеть два поля ввода: одно отвечает за текстовую часть запроса,
другое - за химическую структуру-образец, или молекулярная часть запроса. Можно ввести структуру-образец прямо с клавиатуры в формате SMILES или создать её в редакторе химических формул (кнопка "Start structure editor").




Поисковик постарается найти статьи про вещества, описания которых соответствуют текстовой части запроса, а молекулярная структура близка к структуре-образцу.
Поиск построен на основе движка Lucene с использованием написанного мной плагина, который делает возможным поиск с помощью Lucene "похожих" химических структур. Данные берутся из официальных дампов Википедии. Построение индекса состоит из двух этапов: на первом этапе из дампа выбираются статью о химических веществах, на втором этапе из выбранных статей строится индекс Lucene.

Пока что есть некоторые шероховатости с индексацией структур. Например, сейчас не индексируются соединения с ионной связью, которые обычно состоят из двух несвязанных структур, несущих заряд (а сейчас поддерживается индексация только лишь связанных структур). Думаю, что направлю усилия в первую очередь на решение именно этой проблемы.

У проекта есть твиттер, так что если интересно следить за новшествами - можно подписываться.

Что "под капотом"

ChWiSe.Net - opensource проект, опубликованный под лицензией GPL. Он базируется на моём плагине для Lucene (MolecularLucene), который позволяет искать похожие химические структуры. Исходный код доступен на GitHub под гораздо более свободной лицензией Apache. При разработке ChWiSe.Net я активно использовал opensource наработки "от третьих лиц": помимо упомянутого движка Lucene жизненно важные компоненты ChWiSe.Net - редактор химических формул из ChemDoodle Web Components (двойная лицензия: GPL/коммерческая) и Chemistry Development Kit (CDK). Ещё стоит упомянуть Twitter Bootstrap, jQuery, клиентский шаблонный движок EJS, Bootsrap Paginator и парсер вики-разметки Sweble.

В настоящее время ChWiSe.Net хостится в Google Appengine (GAE). Поисковый индекс в GAE хранится в статических данных веб-приложения, что является наиболее простым решением если обращение к индексу происходит только для чтения. Для того, чтобы библиотека Lucene версии 4.3.1 могла работать со статическим индексом в среде GAE, тербуется слегка пропатчить исходный файл RamUsageEstimator.java в исходниках Lucene и пересобрать Lucene.

Ссылки

http://www.youtube.com/watch?v=V0ddipGhPc0 - Короткая видоперзентация на английском