Perl Hackers Hub

第31回Perlによる自然言語処理入門(3)

(1)こちら⁠2)こちらから。

自然言語処理における前処理、後処理

自然言語処理では各種ツールの前後でデータを変換する前処理、後処理が必要となることがあります。本節ではその際に利用できるモジュールなどを紹介します。

表記の正規化

自然言語処理では、先述のUnicode正規化に加えて必要に応じて正規化を行います。

Regexp::Assemble

Regexp::Assembleは、正規表現を使用して表記の正規化を行う場合に重宝するモジュールです。指定したパターンにマッチする高速な正規表現を生成します。

Number::Phone::JP

Number::Phone::JPは電話番号の正規化を行う場合に使うモジュールで、数字の並びが電話番号か判定し、電話番号である場合は特定の番号表記に統一するといったことができます。

Text::Darts

Text::Dartsにはgsubというメソッドがあり、キーワードに一致した個所を一気に置換できます。

use strict;
use warnings;
use utf8;
use Text::Darts;
my @words = qw/ キーワード/;
my $td = Text::Darts->new(@words);
my $src = "...";
my $result = $td->gsub($src, sub{
    return "<keyword>$_[0]</keyword>";
});

書式変換

各ツール間の入出力形式の違いを吸収するために書式を解析して変換するような場合には、Parse::RecDescentモジュールが便利です。Parse::RecDescentはBNF[2]ライクな文法定義から再帰下降パーサ[3]を生成します。

まとめ

今回はPerlを用いた自然言語処理の基本的な部分について紹介しました。これらの道具を組み合わせることによってさらに高度な処理も可能となるので、チャレンジしてみてください。

さて、次回の執筆者はhiroki.oさんで、テーマは「新卒の方向けPerl入門」です。お楽しみに。

おすすめ記事

記事・ニュース一覧