Lingua::JA::Romaji::Valid

Acme::JapaneseCPANAuthorsを補強するために書いたコードをまとめたもの。アルファベットで書かれたテキストの中からローマ字(あるいは日本人の名前)として正しそうなものを抽出するときに使う。実際の使用例はこんな感じ。

#!perl
use strict;
use warnings;
use Acme::JapaneseCPANAuthors;
use Lingua::JA::Romaji::Valid;
use Parse::CPAN::Authors;
use CPAN::Config;
use File::Spec;

my $cpan = Parse::CPAN::Authors->new( File::Spec->canonpath( $CPAN::Config->{keep_source_where}.'/../01mailrc.txt.gz' ) );

my $validator = Lingua::JA::Romaji::Valid->new('loose');

my @authors;
foreach my $author ( $cpan->authors ) {
  my $name  = $author->name or next;
  my $id    = $author->pauseid;
  my $email = $author->email;

  # skip registered authors
  next if Acme::JapaneseCPANAuthors->id($id);

  # skip those who don't look like Japanese
  next unless $validator->as_fullname( $name );

  # skip those who use unfamiliar mail addresses to us
  next unless $email =~ /\.(com|org|net|jp)$/i;

  push @authors, $author;
}

print "num of unregistered authors:" , (scalar @authors), "\n";

foreach my $author ( sort { $a->pauseid cmp $b->pauseid } @authors ) {
  my $id   = $author->pauseid;
  my $name = $author->name;
  print qq{    $id => '$name'\n};
}

ちなみにParse::CPAN::AuthorsというのはCPANを立ち上げたときに読み込まれる作者データをごにょるもの。これを使うとsearch.cpan.orgとかをスクレーピングしなくてもCPAN Authors全員の情報を取得できる。同様のものにParse::CPAN::PackagesParse::CPAN::Modlistというのもある。インストーラとかパッケージャを書く人は覚えておくとなにかと便利。