Как стать автором
Обновить

Парсим словарь русского языка Зализняка Андрея Анатольевича

Время на прочтение 2 мин
Количество просмотров 7.5K
Понадобилось мне как-то собрать много русских существительных имён в единственном числе и именительном падеже. Стал искать на просторах Интернета. Всё, что попадалось под руку, было либо в не очень удобном формате для меня, либо любительскими сборниками. Хотелось всё-таки более официальных исходных данных, да чтобы можно было перевести в свой формат, например в таблицу базы данных MySQL.

1 сентября 2009 года вступил в силу приказ Министерства образования и науки, утверждающий перечень словарей, грамматик и справочников, рекомендованных Межведомственной комиссией по русскому языку при Минобрнауки. Среди 4 утверждённых книг — Грамматический словарь русского языка А. А. Зализняка.

Я остановился на этом словаре, во-первых, потому что в нём присутствует морфологическое описание слова, что бы вытащить, например, только глаголы совершенного вида. Во-вторых, потому что смог найти электронную версию словаря.

Был еще вариант граббинга wiktionary.org — Категория: Русские существительные. Может быть имеет смысл совместить эти две базы, но пока остановимся на Зализняке.

Словарь


Словарь Зализняка был найден на сайте проекта «Вавилонская башня», посвященному сравнительно-историческому языкознанию. Словари Ожегова, Зализняка и Фасмера доступны как в режиме онлайн, так и для скачивания.

Скачиваем файл dicts.exe от 27.11.2004. Устанавливаем. В папке c:\StarSoft\dict\ буду расположены файлы. Нам нужны только начинающиеся на Z_* (от Z_160 до Z_239). Слова в файлах сгруппированы по первым буквам. Т.е. в файле Z_160 находятся все слова, начинающиеся с буквы А, в Z_161 — с буквы Б и т.д.

Парсер


Файлы в кодировке OEM 866. Я для удобства перевёл их в UTF-8 с помощью Notepad++. Затем написал простенький парсер на PHP. Мне нужны были только существительные мужского и женского рода. Вы можете сами изменить регулярное выражение под свои нужды.
<?php<br/> <br/>mb_internal_encoding('utf-8');<br/> <br/>$dir = new DirectoryIterator(dirname(__FILE__).'/dict/');<br/>foreach ($dir as $file) <br/>{<br/>    if($file->isDot()) {<br/>     continue;<br/>    }<br/> <br/>    if (!preg_match_all('/^(\\p{L}{2,})\\s+\\d+\\s+(?:с|м|ж|мо|жо)\\s+/um', file_get_contents($file->getPathname()), $matches)) {<br/>     continue;<br/>    }<br/> <br/>    foreach ($matches[1] as $word)<br/>    {<br/>     // делайте с $word что хотите<br/>    }<br/>}

В итоге у меня получилась таблица с 39361 существительным.
Теги:
Хабы:
+3
Комментарии 24
Комментарии Комментарии 24

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн