Примеры использования поискового движка

Простые запросы - поиск на персональном компьютере

Поиск с запросами в Unicode

        лигатуры

        диактрические значки

        иероглифы - поиск в китайском тексте

Использование классических регулярных выражений

Поиск слов по регулярным выражениям

Запросы со сложной логической структурой паттернов

Перечисление файлов

Обработка найденных файлов

Поиск в найденном

Нечеткий поиск

Поиск с одновременным переводом

Работа с индексатором

Поиск в локальной сети

Работа с HTTP серверами

Работа с FTP серверами

Простые запросы - поиск на персональном компьютере

Простой поиск одного слова "кошка" в единственном файле a.txt, морфология не включена.

faind a.txt -sample "кошка"

Имя обрабатываемого файла задается как первый аргумент командной строки, поэтому явной команды -file не требуется. Применяется самый простой и быстрый режим поиска - без учета морфологии. Результаты будут выведены только на консоль. Обратите внимание, что обрабатываемый документ будет автоматически разбит на слова, так как используется команда -sample задания паттерна.


То же самое, но просматриваются все файлы в текущем каталоге:

faind . -sample "кошка"

В данном случае . - стандартное имя текущего каталога. Имя обрабатываемого каталога является первым аргументом командной строки, поэтому явного задания команды -dir не требуется. Так как маска файлов не задана, то утилита будет пытаться анализировать все встречающиеся текстовые файлы, и в случае невозможности опознать формат - печатать сообщение "формат неизвестен".

Во всех предыдущих примерах результаты поиска будут напечатаны на консоли. Чтобы получить файл с результатами поиска, необходимо использовать опцию -listfiles (см. о форматировании результатов поиска). К примеру, команда:

faind . -sample "кошка" -listfiles:txt res.txt

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


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

faind .  -name  "reading_*.txt"  -sample "кошка"

В данном случае маска является простым выражением с так называемыми wildcards (подстановочными символами ? и *), которое соотносится с именем каждого находимого файла по обычным правилам: звездочка соответствует любой последовательности символов (в том числе нулевой длины). Таким образом, будут проанализированы файлы с именами типа reading_10.txt, а файлы типа writing_10.txt будут отвергнуты.


Поиск словосочетания "пушистая кошка" в единственном файле a.txt с учетом морфологии

faind a.txt  -wordforms  -distance=s  -sample  "пушистая кошка"

В данном случае:

1. команда -wordforms заставляет найти кроме заданного словосочетания также "пушистую кошку", "пушистой кошке" и так далее. Она должна стоять до команды -sample. Для работы морфологического анализатора требуется, чтобы в каталоге программы находились файлы словаря (скачать их можно здесь).

2. -distance=s требует, чтобы оба слова паттерна находились в пределах одного предложения.

Так как опция -ordered не задана, то будут найдены контексты "кошка пушиста" и т.д., то есть порядок слов при поиске игнорируется.

 

Чтобы результаты поиска можно было проанализировать, следует включить в запрос команду на формирование страницы результатов поиска в формате HTML (возможны и другие форматы). К примеру, для поиска в французской версии "Декларации прав человека" ключевого слова "семья" запрос может быть таким:

faind  -dir  каталог_с_документами  -cp  "iso-8859-1"  -sample  "famille"  -tune  htmlres_2  -listfiles:html res.html

В данном случае именно команда -listfiles:html res.html заставляет поисковый движок сформировать HTML-страничку с результатами. Модификатор -tune htmlres_2 выбирает второй тип представления информации (по умолчанию представление HTML страницы немного другое).


Поиск с запросами в Unicode

Сам по себе поисковый движок φaind работает исключительно с юникодом - внутри все символы представлены двух (или четырех) байтными значениями (то есть в UCS-2 для большинства компиляторов Windows или UCS-4 для Linux). Поэтому и индексная база (ключевые слова), и результаты поиска представляются в юникоде. Таким образом, каких-либо проблем с поиском в документах на разных языках теоретически быть не должно, если не считать вопросы грамматики языков. Реальные проблемы с кодировкой возникают либо при вводе команд, либо при отображении результатов - из-за несоответствия языковых установок ОС и поисковых утилит.

В некоторых случаях текст паттерна запроса невозможно либо затруднительно ввести в командной строке. Например, если попробовать в запросе указать ключевое слово développment на французском языке, то сделать это в консоли для локализованной версии ОС будет трудно из-за необходимости вводить символы с диактрическими значками.

В этом случае проще всего воспользоваться способностью поискового движка загружать паттерны запросов из любых текстовых файлов, в которых текст кодирован в utf-8 и utf-16. Таким образом, необходимо во-первых в каком-либо текстовом редакторе (Блокнот MS Windows вполне подойдет) сформировать нужный запрос, привлекая стандартную для MS Windows программу charmap для выбора отсутствующих на клавиатуре символов, и во-вторых сохранить этот файл в кодировке utf-8. В таком случае проблемы с кодовыми страницами минимизируются.

Затем созданный файл с текстом запроса (пусть для примера это будет my_query.txt) можно указать в командной строке:

faind  -dir  каталог_с_документами  -cp  "iso-8859-1"  -index  off  -sample @my_query.txt  -tune  htmlres_2  -listfiles:html  res.html

Так как HTML результаты формируются также в кодировке utf-8, то найденные контексты будут показаны без искажений (при условии, что шрифты ОС содержат нужные символы):

Вообще говоря, диактрические знаки (акценты) зачастую мешают при поиске. Чтобы исключить их (то есть не учитывать), достаточно использовать опцию -strip_accents=true (см. описание). Тогда результат поиска будет вполне удобочитаем даже в консоли с несоответствующей локалью (пример для французского языка):

поиск для французского языка

Пользователи ОС Windows XP и выше могут воспользоваться расширенной поддержкой юникода для консоли и возможностью динамически переключать кодовую страницу (в отличие от более ранних версий Windows).

Порядок действий таков:

Во-первых, следует открыть окно консоли и выбрать для него шрифт "Lucida Console", который содержит основные символы разных частей юникода:

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

Так как поисковый движок, начиная с версии 0.81, достаточно корректно работает с юникодом в текстовых файлах и при выводе результатов, Вы можете выполнять поиск в документах на разных языках. К примеру (взяты тестовые страницы из комплекта сервера Apache), на чешском:

результаты поиска в консоли для чешского языка

Как видно, консоль совершенно нормально отображает одновременно кириллицу и символы iso-8859-2 (восточноевропейские алфавиты). Еще пример - на польском:

результаты поиска в консоли для польского языка

Алфавиты центральной и южной Европы (iso-8859-1) также без затруднений отображаются, к примеру - результат поиска для французского текста:

результаты поиска в консоли для французского языка

Отображение в консоли результатов для других алфавитов может встретить затруднения по причине отсутствия поддержки нужных символов в системном шрифте. К примеру, документ на иврите (кодовая страница iso-8859-8) даст в консоли нечитаемый результат:

Однако в HTML странице результатов проблем с отображением контекста нет:

Одной из особенностей некоторых языков, способных попортить нервы как разработчикам, так и пользователям, являются лигатуры - сочетания двух и более символов в одном составном символе. Лигатуры используются достаточно редко, но тем не менее в некоторых европейских языках встречаются слова, которые пишутся иногда - с лигатурами, иногда - с разделенными символами. К примеру, во французском языке встречается лигатура Œ, к примеру в слове œil - глаз. Если в обрабатываемом тексте встречается слово с лигатурой, то "наивный" подход к сопоставлению строк прямым побайтовым сравнением не даст нужного результата. В поисковой машине применяется более сложный алгоритм, который позволяет корректно сопоставлять "œil" и "oeil". В качестве иллюстрации используется поисковая система Интегра, так как графический интерфейс позволяет наглядно показать все тонкости работы с лигатурами. Паттерн запроса - это искомое слово, записанное через лигатуру (для ввода использовалась системная утилита charmap):

лигатуры в поисковом запросе

Текст (это произведение Стендаля "Красное и черное") содержит это слово в "упрощенном" написании:

поиск с лигатурами

Среди распространенных европейских языков необходимо упомянуть немецкий с его лигатурой ß, которая соответствует двум символам ss. К примеру, поиск в Книге Бытия (перевод Лютера) слова dass с помощью поисковой системы Интегра

дает такой результат (искался только первый контекст):

результаты поиска с лигатурами

Как видно, найден участок со словом "daß".

Другой особенностью языков, доставляющей определенное неудобство при разработке алгоритмов поисковой машины, являются диакритические значки. В большинстве случаев их существование объясняется необходимостью отражать на письме фонетическую систему с помощью алфавита, приспособленного только для латинского языка. Иногда диактрические значки используются для указания на особенности произношения (греческий язык со своим уникальным алфавитом). Дело осложняется тем, что в некоторых случаях диактрические значки являются второстепенными и не несут семантическую нагрузку, тогда как иногда буквы с разными диактрическими значками дают разные слова. Яркий пример - французский язык, в котором слова a и à,  состоящие из одной буквы, означают разные вещи (предлог и форма глагола иметь). В общем случае выбор алгоритма сопоставления букв с диактрическими значками поручен самому пользователю. В подавляющем большинстве случаев лучшей стратегией будет считать диактрические значки незначащими модификаторами и игнорировать их при сравнении. В результате, поиск слова Mörtel

диактрические значки в поисковом запросе

дает правильный результат:

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

 

Если в ОС установлены все необходимые шрифты, то можно работать даже с иероглифами. Возьмем к примеру китайский перевод Книги Бытия и выполним поиск иероглифова, который несет значение "Бог". Команда для поисковой утилиты φaind выглядит так:

faind -file genesis.big5.txt -cp big5 -index off -regex @god.txt -tune htmlres_2 -listfiles:html res.html

В данном случае -cp big5 (см. о кодировках) - это принудительное задание кодировки текста. Сам текста запроса - это иероглиф, обозначающий понятие Бог (если упрощать - то одно слово), записан в текстовом файле с именем god.txt в кодировке utf-8:

В результате поиска формируется HTML файл в кодировке utf-8, который без проблем отображается современными браузерами:

результаты поиска для китайского языка


Использование классических регулярных выражений

Составление списка всех URLов гиперссылок, упомянутых на веб-странице:

faind  -uri  http://www.solarix.ru  -stripdecor=false  -href=false  -regex  "(http|ftp)://([0-9a-zA-Z/\.]+)\.(\w+)"  -listfiles:xml

 В данном случае:

1. адрес веб-страницы указан опцией -uri

2. опция -stripdecor=false позволяет видеть в веб-странице всю служебную информацию, в том числе - тэги, которые и содержат интересующие нас гиперссылки (по умолчанию виден только отображаемый в браузере текст).

2. опция -href=false запрещает переходить по гиперссылкам.

3. опция -regex "..." задает паттерн поиска - регулярное выражение, которое и выполняет собственно выделение интернет-адресов из текста. Подробно синтаксис регулярных выражений описан здесь.

4. результаты поиска будут собраны в XML файле res.xml, это задается опцией -lisfiles.

Следует отметить, что классические регулярные выражения не могут использоваться с индексатором. Поиск в индексе можно выполнять с помощью пары опций -rx -sample, которые с некоторыми ограничениями допускают задание регулярных выражений (см. пример далее).


Поиск слов по регулярным выражениям

Можно использовать другой алгоритм поиска, который также основан на регулярных выражениях. Задействуется он парой опций -rx -sample. Опция -rx является модификатором для -sample и заставляет рассматривать каждый терм паттерна как отдельное регулярное выражение, сопоставляемое с отдельной лексемой текста. Такой подход позволяет оставить разбивку текста на лексемы парсеру поискового движка, сосредоточившись на составлении регулярных выражений для лексем.

К примеру, имитировать поиск с учетом морфологии (именно сымитировать, так как подлинной морфологией здесь нет) можно задавая корень искомого слова и изменяющийся аффикс в виде квантора (.*)

faind  -dir  область поиска  -rx  -sample  "'кош(.*)'"

Обратите особое внимание на то, что регулярное выражение кош(.*) заключено дополнительно в одинарные кавычки - чтобы предотвратить разбивку на отдельные символы.

Результат поиска:

поиск с регулярными выражениями

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

Необходимо четко понимать следующую разницу между работой команд -regex и -rx -sample. Первая команда ищет заданную последовательность символов (среди которых могут быть и метасимволы) в текстовом документе. Поэтому паттерн для -regex не нужно обрамлять фрагментами (.*) или (.+), то есть явно задавать пропуск произвольного числа начальных и конечных символов. С другой стороны команда -rx -sample сопоставляет отдельные лексемы документа с компонентами паттерна. Каждый компонент является отдельным регулярным выражением. Чтобы отбрасывать при сравнении окончание слова, необходимо добавлять (.*) или (.+). Вот пример поиске в индексе:

регулярные выражения

В данном случае регулярное выражение мо(.+)  сопоставлено со словами можно, момента, момент и др.


Запросы со сложной логической структурой паттернов

Рассмотрим на примере, как можно применять логические операторы в паттернах для увеличения релевантности поиска.

Наша задача - выяснить по некоторому тексту в файле child.txt (это детская сказка), что делает девочка - главная героиня.

Итак, приступаем. Первый запрос формулируем в виде:

faind  child.txt  -wordforms  -distance=s  -onceperfile=false  -sample  "девочка"  -listfiles:html  res.html

Результат содержит очень много мусора, так как в выборку попали все предложения, в которых встречается любая из словоформ статьи ДЕВОЧКА.

См. РЕЗУЛЬТАТ 1

Сразу отметим, что помещенный на сайте результат немного более красочен, чем выдаст утилита FAIND с опцией -listfiles:html. Дело в том, что для отображения результата мы использовали генератор отчетов. Это, однако, сути дела не меняет.

Мы решаем отсеять часть вариантов, задав в паттерне требования поиска сразу по двум опорным точкам - чтобы искать и слово ДЕВОЧКА, и следующий за ним (в пределах предложения) глагол.

... -sample  "девочка # ПРЕДИКАТ:* {}"

Здесь использован грамматический квантор (конструкция после знака диез).

Количество найденных контекстов сократилось.

См. РЕЗУЛЬТАТ 2

Усложняем запрос далее. Используем тот факт, что в русском языке подлежащее вполне определенным образом согласуется со сказуемым, а именно - сказуемое (глагол) должно быть либо в 3 лице настоящего времени (девочка говорит), либо в прошедшем времени (девочка говорила). Вообще говоря, согласование на этом не исчерпывается, но мы пока упрощаем ситуацию.

Итак, паттерн в запросе принимает вид:

... -sample "девочка # ПРЕДИКАТ:* { ЛИЦО:3 } OR # ПРЕДИКАТ:* { ВРЕМЯ:ПРОШЕДШЕЕ }"

Первая опорная точка - по прежнему одно слово ДЕВОЧКА. Вторая опорная точка задана как альтернатива -

- либо глагол в настоящем/будущем  времени (это требование выполнится неявно, поскольку задано лицо, которое для прошедшего времени не определено в парадигме глагола),

- либо глагол в прошедшем времени.

Результат содержит всего несколько контекстов. Обращаю внимание, что мы не вводили еще одно требование на сказуемое - быть в единственном числе, поэтому несколько контекстов явно нерелевантны.

См. РЕЗУЛЬТАТ 3

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

-sample "#СУЩЕСТВИТЕЛЬНОЕ:девочка { ПАДЕЖ:ИМ } # ПРЕДИКАТ:* { ЛИЦО:3 } OR # ПРЕДИКАТ:* { ВРЕМЯ:ПРОШЕДШЕЕ }"

Результат содержит совсем мало контекстов.

См. РЕЗУЛЬТАТ 4

Перечисление файлов

Если паттерн запроса не задан, то паук поисковой машины просто перечисляет найденные в области поиска файлы. Это позволяет легко создавать списки файлов в одном из реализованных форматов результатов. К примеру, команда:

faind  -e:\somedir  -iname:rx  "(.*)manual.txt"  -size  ">=20M"  -listfiles:html res.htm

создаст HTML-страничку со списком файлов, удовлетворяющих всем указанным условиям (размер не менее 20 Мб, имя подходит под образец manual.txt).

 

Обработка найденных файлов

Основной результат работы поискового движка - файлы и контексты. Может возникнуть задача выполнить над найденными файлами некоторые действия. Для этого есть опция -exec (и ее аналог -ok). Подробнее о синтаксисе этих опций см. здесь.

К примеру, если необходимо скопировать все найденные файлы в каталог e:\tmp:

faind  e:\mvoice\solaris\dictiona\food\  -distance=s  -sample  "пушистая кошка"  -exec copy '{}' 'e:\tmp' ';'


 

Работа с индексатором

Что такое индексатор документов поисковой машины и все опции, контролирующие его работу, описаны здесь. Рассмотрим основные приемы работы с индексатором в консольной версии поисковой машины.

Поисковый движок позволяет создавать несколько независимых индексов, каждый со своими настройками. Создание нового индекса включает в себя два этапа: объявление нового индекса и заполнение его данными в ходе индексирования документов. Объявление нового индекса выполняется командой -index create_domain:

faind -index create_domain MyIndex

Объявленный индекс MyIndex пока пуст. Для его заполнения сведениями о документах необходимо в командной строке указать имя этого индекса с помощью команды -index domain=MyIndex и определить область поиска. Например, чтобы выполнить индексирование документов в каталоге XXX:

faind -index domain=MyIndex -dir  XXX

индексирование документов

По окончании индексирования на консоль будет выведена краткая статистика:

индексирование документов - завершение

 

При индексировании можно применять все команды задания области поиска, в том числе фильтры для файлов (по маскам имени, по размерам и т.д.) и задание кодировок. К примеру, для индексирования только файлов *.html на компакт-диске можно использовать команду:

faind -index domain=имя_индекса -iname "*.html" -cdrom

 

Чтобы посмотреть статистику индекса, используется команда -index info:

состояние индекса

 

Команда -index domains позволяет вывести список всех созданных индексов:

список индексов

Чтобы выяснить совокупные параметры всех индексов, можно использовать команду -index totals:

состояние индексатора

Обработка всех индексных баз данных может занять весьма много времени, так как индексатор будет монтировать каждую базу, загружать некоторые таблицы в оперативную память для анализа, а затем размонтировать базу.

Поиск по проиндексированным документам выполняется просто с указанием имени индекса вместо области поиска. Простейший пример:

faind -index domain="Мошков-1"  -sample "кошка"

Результатом выполнения этой команды будет список файлов, в которых содержится ключевое слово "кошка". Заметьте, что морфология при поиске выключена, а список файлов выдается прямо на консоль. Есть команды, которые позволяют включать морфологию и задавать способ сохранения выводимых результатов поиска.

Выполним сложный поиск в созданной области с печатью контекстов (см. -index touchfiles) и учетом морфологии (см. -wordforms):

faind  -index  domain="Мошков-1"  -index  touchfiles  -wordforms  -sample  "кошка"

поиск по индексу

Индексатор допускает поиск по регулярному выражению - только это должен быть -sample запрос (а не -regex) - подробнее о паттернах см. здесь:

faind  -index  domain="Мошков-1"  -index  touchfiles  -wordforms  -rx  -sample  "'кош(.*)'"

Обратите особое внимание, что терм кош(.*) дополнительно заключен в одинарные кавычки - это необходимо для правильного разбиения паттерна запроса на термы. Результат исполнения:

поиск по индексу

Как видно на скриншоте, индексатор вполне успешно ищет по регулярным выражениям - обратите внимание на найденный контекст "кошмар". Поиск с регулярными выражениями в индексе занимает значительно больше времени, чем обычный поиск - из-за того, что приходится загружать полный справочник ключевых слов.

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

1. Включение анализатора морфологии для приведения словоформ к базовым словарным формам (см. команду -index wordforms).

faind -index domain=MyIndex -index wordforms -dir  XXX

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

2. Сохранение в индексе частотной информации, необходимой для простого ранжирования документов в результатах поиска (см. команду -index frequency).

faind -index domain=MyIndex -index wordforms -index frequency -dir  XXX

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

3. Сохранение в индекса информации о расположении слов, благодаря чему поиск словосочетаний будет выполняться быстрее (см. команду -index proximity).

faind -index domain=MyIndex -index wordforms -index proximity -dir  XXX

 

Поиск в найденном

Допустим, необходимо выполнить многостадийный поиск: сначала выбрать файлы, которые содержат одно ключевое слово, а затем среди этих файлов найти различные паттерны. Задачу можно решить либо повторением поиска для всех паттернов по всех исходной выборке с использованием логических операторов (см. здесь), либо сначала выбрать файлы по ключевому слову (если файлы проиндексированы, то это будет очень быстро) и сохранить список в виде XML файла, а затем выполнить несколько поисков для отдельных паттернов, указав имя XML файла в качестве источника имен файлов.

Вот так будет выглядеть диалог с компьютером:

1. Создаем XML файл со списком файлов:

faind  -dir  XXX  -sample  "кошка"  -listfiles:xml  res.xml

2. Повторяем поиск по списку файлов:

faind  -flist  res.xml  -distance=s -sample  "пушистая кошка"  -listfiles:html res.html

 

Нечеткий поиск

Нечеткий поиск в явном виде включается опцией -soundex для команды -sample. При этом обязательно должна быть упомянута опция -wordforms.

Результаты применения данной опции могут быть неожиданными, так как критерии похожести слов достаточно расплывчаты. К примеру, запрос

faind  -dir  каталог  -wordforms  -soundex  -distance=s  -sample  "дикая кошка"

даст такой результат:

нечеткий поиск

то есть поисковый движок спокойно сопоставляет пары слов "дикая - такая" и "кошка - вошла". В ряде случаев нечеткий поиск - единственный способ найти слово, которое где-то в документах написано с ошибками. К примеру, пусть в документе написано "консервы соответсвуют ГОСТу". При внимательном рассмотрении слово соответствуют в документе написано с ошибкой - пропущена буква т.Только нечеткий поиск позволит найти этот документ:

пример поиска с опечатками

Обратите внимание, что поисковый движок выставил достоверность своей находки как 0.91 - то есть, не абсолютное совпадение, но очень вероятное. В случае, когда достоверность сопоставления паттерна и текста в файле абсолютна (100%), данное значение не отображается.

 

Поиск с одновременным переводом

Допустим, что мы ищем слово 'кошка' в текстовых файлах, часть из которых содержит английский текст. Разумеется, без дополнительных усилий сопоставить слова кошка и cat не удастся.

В ряде простых случаев может помочь опция -semnet (см. ее описание). К примеру, запрос:

faind  -file  cats.txt  -index  off  -distance=s  -onceperfile=false  -soundex  -semnet=1  -wordforms  -sample  "кошка спит"  -listfiles:html  res.html

для файла с текстом:

Большая ленивая кошечка лежит, спит и видит сны о мышках.

Big lazy cat is sleeping and dreaming.

даст результат:

поиск с переводом

то есть найдены оба вхождения словосочетания 'кошка спит', причем первый раз - уменьшительно-ласкательная форма существительного 'кошечка', а второй раз - английские слова 'cat' и 'sleep'.

Аналогично работает и обратный перевод - в поисковом запросе задан паттерн "cat sleeps", а программа находит:

перевод текста при поиске

То есть оба контекста - "кошечка спит" и "cat is sleeping".

Многоязыковая основа грамматического движка в поисковой машине FAIND позволяет достаточно просто масштабировать примененную методику перевода при поиске для нескольких языков. К примеру, так выглядит поиск английского слова 'cat' в текстовом файле, содержащем русский. английский и французский тексты:

мультиязыковой поиск

См. также - экранный переводчик.

Дополнительные материалы

Процедурный API поисковой системы

Где скачать поисковую систему и SDK

Скачать SDK поисковой системы с примерами и другие компоненты можно здесь поисковая система

  © Mental Computing 2010
изменено 01-Jun-10