shoorick: (Default)
[personal profile] shoorick
На перлбурге обслуждали мы с Анатолием [livejournal.com profile] sharifulinым его блиц-доклад про CPAN.
— А что хочешь выложить?
— Да есть у меня модуль для склонения русских имён.
— Так он, поди, у всех есть! :-) Каждый его пишет.
— Пишет, может, и каждый, да не каждый выкладывает.

Мне известен лишь один модуль, который склоняет имена — Lingua::RU::Sklon, но он мне не нравится:

  1. Кодировка модуля — вражеская CP1251 вместо правильной UTF-8.
  2. Идентификаторы образованы от сокр. рус. слов. VIN вместо ACCUSATIVE — неудобно.
  3. За три года модуль так и не ушёл дальше версии 0.01
Поэтому я выложил свой модуль. Теперь в скриптах можно написать так:
#!/usr/bin/perl -wl -CO

use utf8;
use Lingua::RU::Inflect ':all';

my @name = qw/Чайковский Пётр Ильич/;
my @inflected;
$, = ' ';

for ( NOMINATIVE .. PREPOSITIONAL ) {
    @inflected = inflect_given_name( $_, @name );
    push @inflected, shift @inflected;
    print @inflected;
}
Результат:
$ ./test-tchaikovsky.pl
Пётр Ильич Чайковский
Петра Ильича Чайковского
Петру Ильичу Чайковскому
Петра Ильича Чайковского
Петром Ильичом Чайковским
Петре Ильиче Чайковском
Работоспособность протестирована пока что в Mandriva Linux 2010.0, FreeBSD 6.2 и 7.2.

Ближайшие планы:

  1. Разобраться с кириллицей в документации (CPAN считает, что она написана в ISO8859-1, а не в UTF-8);
  2. Написать README, а не оставлять то, что сгенерировано автоматически;
  3. Сделать порт для FreeBSD.
  4. Найти (или организовать) список рассылки / IRC-канал / Jabber-конференцию / форум / вписать желаемое для обсуждения багов;
  5. Ускорить домашнюю связку trac+svn (где сейчас и живёт Lingua::RU::Inflect) либо перенести проект на какой-либо внешний более шустрый хостинг.
Дальние:
  1. Научить модуль склонять любые существительные и прилагательные — в конце концов, имена и фамилии склоняются аналогично: уже сейчас inflect_given_name( DATIVE, qw/Синий чайник/ ) возвращает qw/Синему чайнику/.
  2. Сделать блиц-доклад? :-)
P. S. Да, я знаю, что слово «склонение» переводится как «declension».

Date: 2010-02-24 09:01 am (UTC)
From: [identity profile] quappa.livejournal.com
Поздравляю! :)

Кстати, в посте надо сделать s/span.org/cpan.org/

s/span.org/cpan.org/g

Date: 2010-03-02 08:54 am (UTC)
From: [identity profile] shoorick.livejournal.com
Ой! Сделал.

Date: 2010-02-24 04:10 pm (UTC)
ext_659893: Sapa (Default)
From: [identity profile] sappa.livejournal.com
> Кодировка модуля — вражеская CP1251 вместо правильной UTF-8.

Превильная кодировка для строк в перле это...(surprise!)...внутреннее перловое представление строк. В принципе даже знать как оно там внутрю закодировано необязательно, главное что это строка символов и символы эти из набора ISO 10646 Universal Character Set (UCS). Но для более продвинутым будет полезно знать что таки да, внутреннее представление это тоже UTF-8 но со специальным флажком предписывающим трактовать данные строки как символьные, а не байтовые.

Re: Отфтопик

Date: 2010-02-25 12:30 pm (UTC)
From: [identity profile] shoorick.livejournal.com
Обнаружил, что ты есть в списке CPAN-авторов,
не разместивших ни одного модуля.
Планируешь размещать?

Date: 2010-02-24 07:01 pm (UTC)
From: [identity profile] bessarabov.livejournal.com
> 0. Разобраться с кириллицей в документации (CPAN считает, что она написана в ISO8859-1, а не в UTF-8);
Насколько я понимаю, просто в начало файла Inflect.pm нужно дописать:

=encoding UTF-8
=cut

Re: =encoding

Date: 2010-02-25 10:17 am (UTC)
From: [identity profile] shoorick.livejournal.com
Интересно, что встроенная в kate подсветка синтаксиса не знает слова =encoding, хотя остальные команды POD — знает.
From: [identity profile] zhdinar.livejournal.com
Будет здорово, если у тебя есть перевод твоего модуля на на русский язык :).
В этом случае он будет первым размещен в разделе "Модули CPAN" который я собираюсь открыть на сайте http://perl5doc.ru
From: [identity profile] shoorick.livejournal.com
Перевод есть. Точнее, документация к модулю сразу писалась на русском, ещё до того, как было принято решение выложить его на CPAN, а уже потом оны была заменена переводом её на английский. Осталось взять этот текст, дописать перевод документации новых функций (она сразу писалась на английском) — и можно будет выкладывать. Скорее всего я включу её в состав дистрибутива: Анатолий [livejournal.com profile] sharifulin посоветовал положить её в RU/Lingua-RU-Inflect.pod либо RU/Lingua/RU/Inflect.pod — сейчас уточню у него, какой из этих вариантов лучше.
From: (Anonymous)
Здорово, не встречал пока на CPAN модулей с документацией как на русском так и на английском языках, вот китайцы и японцы преуспели в документировании модулей на своих языках, к сожалению в большинстве своем, если пишут на китайском/японском, тогда нет варианта на английском, а это, как мне кажется, не есть хорошо.

Date: 2010-02-27 10:30 pm (UTC)
From: [identity profile] quappa.livejournal.com
Кстати, в посте надо сделать s/span.org/cpan.org/ -- а то ссылки не работают.

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 21st, 2026 11:52 pm
Powered by Dreamwidth Studios