Search engines
Python
8 July 2013

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

From Sandbox
По работе мне часто приходится вести переписку на английском, и в силу недолеченного перфекционизма, пользоваться для этого оффлайн/онлайн переводными/толковыми словарями. В целом они со своей работой справляются, пока дело не доходит до проверки правильности словосочетаний или целых фраз. Хочешь ввернуть что-нибудь из разряда продвинутого владения языком, но нет уверенности, что правильно помнишь (большой привет предлогам и фразовым глаголам).

Есть парочка ресурсов, для поиска фраз, но заточены они в основном под общеупотребимые словосочетания, пословицы и фразеологизмы на отдельно взятом языке. К тому же не известно пользуются ли люди искомой фразой или употребив её вы поставите в тупик даже носителя языка.
Для решения проблемы я привык использовать googlе. Метод прост до неприличия: ищем всю фразу целиком (для тех, кто не в курсе – фразу для этого нужно заключить в двойные кавычки), получаем как всегда набор ссылок + большой бонус в виде кучи рекламы количества найденных страниц. Вот эта цифра нас и интересует. Если количество «попаданий» подозрительно мало, перефразируем и/или исправляем ошибки. Снова ищем. Обычно за 2-3 итерации получается нормальный результат.

Ещё пара плюсов метода:
+ не зависит от используемого языка. Так что когда «заклинит» (издержки свободы интернета – иногда просто забываешь, как оно было в «великом и могучем»), я тоже им пользуюсь;
+ репрезентативная выборка из ну оооооооооооочень большого количества проиндексированных страниц, а следовательно языка «живого» и актуального.

На то, какой результат считать нормальным влияют несколько факторов:
— длина фразы;
— распространённость в языке;
— общее количество ресурсов в Интернете на данном языке (очевидно, что сайтов на немецком на порядок меньше, чем на испанском и т.д.).
В общем всё достаточно очевидно, нужно только немного набить руку. Например, для распространённых словосочетаний на английском результат должен исчисляться хотя бы сотней тысяч (почему не миллионами объясню чуть ниже).

Минусы метода (при использовании браузеров):
— подсказки и история поиска в браузерах иногда вызывают скрежет зубовный. То нечаянно выбираешь другую фразу из предложенных, то борешься с кавычками. Мелочь, а иногда раздражает;
— нужно держать браузер открытым, что частенько вредно для “getting thing done”, то бишь отвлекает от работы. Либо запускать браузер (со всеми 100+ вкладками, открытыми с позапрошлого года. Шутка, конечно, но недалеко от правды. Разве что Firefox не пытается их все подгрузить при старте, но и он «отыгрывается» на загрузке кучи плагинов, которые так приятно устанавливать и так жалко удалять).

С целью борьбы с издержками метода и была написана консольная программка на Питоне (2.7), которая ищет фразы используя поисковые движки Google и Bing. Пример использования:



Пара комментариев:
— я немного увлёкся и прикрутил поиск в Bing-е, хотя это и избыточно. Уберите сами, если будет мешать задержка на дополнительный запрос. Так же для Bing, если вы захотите использовать исходник программы, нужно получить подписку на пользование Bing Search API (5000 запросов в месяц бесплатно) на Windows Azure Marketplace, и затем создать Account Key (имя не имеет значения). Ключ, который выдаётся по умолчанию не подходит (видимо из соображений безопасности, поправьте меня если это не так). В дистрибутиве под Windows ключ естественно уже прописан, но если перестанет работать, значит исчерпаны запросы на текущий месяц;
— в силу заморочек Google AJAX API, с помощью которого выполняется запрос, приблизительное количество «попаданий» будет очень сильно приблизительным (то, о чём я писал выше — иногда на порядок отличается от цифры выдаваемой при поиске с помощью браузера). Эта проблема известна как code.google.com/p/google-ajax-apis/issues/detail?id=32. Есть подозрение, что Bing Search API ведёт себя так же хитро;
— так же, учитывая мои затруднения с преобразованиями кодировок в Питоне (консоль, система, запрос), я не смог добавить поддержку кириллицы. Если кто-то захочет допилить — милости прошу.

Исходник и архив с дистрибутивом под Windows можно взять здесь.
Дистрибутив достаточно разархивировать в какую-нибудь папку, и добавить путь к ней в системные пути.

Буду благодарен за ссылки на похожие посты/ресурсы/программы.

UPD: Хабраюзер revol0ution подсказал похожий пост.
UPD: Ссылка на интересный ресурс Google по поиску слов и фраз в книгах, от пользователя coffeecupwinner.

+11
9.7k 62
Comments 11