About

Appengine вас ограничивает

Начну с нескольких пожеланий, которые мне пришли от пользователей.

  • Екатерина Волкова: если статья не найдена, найти похожие слова и выдать варианты.
  • Ged Korshunov.ru: придумать ботам более нормальные ники, т.е. заполнить vcard.
  • Rain: а чего для словарных ботов не использовать тот же домен, что и для сайта проекта — jabberdict.ru?

Похожие варианты

Классическим (в понимании компьютерных лингвистов) является расстояние Левенштейна, которое предложила Екатерина. Проблема в том, что при запросе вычислять это расстояние для миллиона (или даже ста тысяч слов) дело неблагодарное, а провести вычисления заранее невозможно.

Мне видятся два подхода: вычислять что-нибудь типа soundex для слова или использовать модель ошибок.

Soundex — это способ представления слова в соответствии с его звучанием. Первая буква слова сохраняется, остальные заменяются кодами в соответствии с таблицей; результирующий код имеет длину четыре символа (буква и три цифры). Для русского языка soundex не работает, но есть неплохие попытки адаптации (что-то сейчас хабр умер, но оживет, думаю).

Главная проблема такого подхода: он ловит неправильное написание (ошибочная замена гласных и т.п.), но не ловит опечатки. То есть, если перепутать пару согласных или написать слово в неправильной раскладке, то soundex уже не поможет.

С точки зрения Appengine такой подход влечет за собой распухание базы данных, а как вы все помните, бесплатный лимит уже почти исчерпан.

Второй способ довольно любопытен, а главное крайне лаконичен (21 строка на Python). Основная идея такова: мы вводим некую модель изменения слова (удаления, вставки и прочее), потом перебираем все варианты (на среднестатистическое слово их несколько сотен). Затем просто ищем по словарю все варианты «исправлений». Не сработало? Давайте сделаем две итерации.

Не лучший вариант с точки зрения производительности (~10 слов в секунду в худшем случае), но зато не нужно ничего хранить. Ну и потом мы же помним, что Datastore медленно пишет, но зато быстро читает?

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

vCard

Логичная просьба. Видеть в ростере бота с именем «Словарь Ожегова» куда приятнее, чем ozhegov@jabberdict.appspotchat.com. Но, увы, в Appengine этого нет.

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

Домен

Не получился красивый ник, так давайте сделаем хотя бы красивый адрес. Например ozhegov@jabberdict.ru.

Мы все помним, что есть такая прекрасная штука, как Google Apps for Domain. Там и почта на своем домене, и сайти, и Google Talk. И XMPP адреса, наверное, тоже можно перенести на свой домен, правда?

Нет. «The use of Google Apps domains in XMPP addresses is not yet supported for apps».

Вместо заключения

Если вы хотите сделать форум, или сайт-визитку, то GAE отлично подходит. Я, конечно, лукавлю, есть масса относительно сложных штук, которые можно теперь делать в Appengine (так или иначе), но если вы делаете что-то нестандартное, то будьте готовы к тому, что вы упретесь в потолок. Не потолок бесплатного аккаунта, а потолок возможностей самой платформы.

А я буду обдумывать перенос сервера на другую платформу.

Добавить пост в: Delicious Reddit Slashdot Digg Technorati Google
(уже: 1) Комментировать статью

Комментарии

К этой публикации комментариев нет

Форма комментирования для «Appengine вас ограничивает»

Обязательное поле. Не больше 30 символов.

Обязательное поле