Wolfram|Alpha — это такой интересный сервис, который умеет парсить текстовые запросы, выделять из них смысловые части из разных областей знания и показывать все, что про это известно. (Совсем не обязательно, кстати, формулировать запрос вопросом.)
У Wolfram|Alpha существует недавно открывшийся API, к которому (за деньги) можно делать программные запросы. Работа с API представляет собой обращение к соответствующему адресу с GET-параметрами и ответ в виде XML.
На сайте опубликованы и модули для работы с API на языках платформы .NET, Perl, Python, PHP и Ruby, а в планах — C++ и Java.
По большому счету суть этих модулей сводится к тому, чтобы преобразовать полученный XML в удобную для программиста структуру данных, специфичную для языка. В Perl это многоуровневый хеш.
Ответ состоит из нескольких частей (контейнеров, так называемых pods), в каждой из которых данные представлены в одном из форматов, который считается приемлемым для обработанного запроса. Дополнительные секции предположений (assumptions) дают дополнительные ссылки, если выяснится, что запрос может быть понят иначе (пример из документации: pi — это и число π, и название фильма.
Более того, каждая панель обычно содержит несколько вариантов представления данных. Например, текстовые значения почти всегда дублируются картинками:
![]()
Работа с модулем Net::WolframAlpha проста. Делаем запрос:
use Net::WolframAlpha;
my $wa = Net::WolframAlpha->new(appid => 'ABCDE');
my $query = $wa->query(
'input' => 'pi',
'scantimeout' => 3,
);
А затем методами, одноименными с XML-тегами разбираем ответ, который представляет собой объект класса Net::WolframAlpha::Query. Дамп ответа, полученного на запрос pi, — 85 килобайт текста :-) В этом же объекте хранятся и фрагменты полученного XML.
Ответ на запрос perl содержит четыре контейнера, правда с информацией, которая не относится к языку Perl. Впрочем, не обидно: другие языки программирования тоже отсутствуют :-)
Net::WolframAlpha поддерживает также две дополнительных возможности API — асинхронную обработку и проверку правильности запроса.
Разработчик модуля — Габриэль Вайнберг (Gabriel Weinberg) — говорит, что модуль обязательно появится на CPAN.
P. S. (Обновление на следующий день.) Модуль уже на спане: search.cpan.org/~yegg/Net-WolframAlpha-1.0/.
Комментировать