1

私はさまざまな記事を扱っていますが、私が抱えている問題は、さまざまな著者が句読点にさまざまな文字を使用していることです。

たとえば、私が現在扱っているいくつかのドキュメントには、次のような文字が含まれています。

\x91
\x92
\x{2018}
\x{2019}

これらの文字はすべて、単純な引用を表しています'

私がやりたいのは、記事を単純化して、すべての記事が同じフォーマット スタイルになるようにすることです。

これらの文字と同様の文字 (二重引用符、ダッシュなど) を単純な ASCII 文字に変換するモジュールまたは方法を知っている人はいますか?

私は現在次のようなことをしています:

sub fix_chars_in_document {
    my $document = shift;
    $document =~ s/\xa0/ /g;
    $document =~ s/\x91/'/g;
    $document =~ s/\x92/'/g;
    $document =~ s/\x93/"/g;
    $document =~ s/\x94/"/g;
    $document =~ s/\x97/-/g;
    $document =~ s/\xab/"/g;
    $document =~ s/\xa9//g;
    $document =~ s/\xae//g;
    $document =~ s/\x{2018}/'/g;
    $document =~ s/\x{2019}/'/g;
    $document =~ s/\x{201C}/"/g;
    $document =~ s/\x{201D}/"/g;
    $document =~ s/\x{2022}//g;
    $document =~ s/\x{2013}/-/g;
    $document =~ s/\x{2014}/-/g;
    $document =~ s/\x{2122}//g; 
    return $document ;
}

しかし、手動で文字を見つけて置き換える必要があるため、これは非常に困難です。

4

1 に答える 1

7

まず、ソリューションはハッシュの恩恵を受けます。

my %asciify = (
   chr(0x00A0) => ' ',
   chr(0x0091) => "'",
   chr(0x0092) => "'",
   chr(0x0093) => '"',
   chr(0x0094) => '"',
   chr(0x0097) => '-',
   chr(0x00AB) => '"',
   chr(0x00A9) => '/',
   chr(0x00AE) => '/',
   chr(0x2018) => "'",
   chr(0x2019) => "'",
   chr(0x201C) => '"',
   chr(0x201D) => '"',
   chr(0x2022) => '/',
   chr(0x2013) => '-',
   chr(0x2014) => '-',
   chr(0x2122) => '/',
);

my $pat = join '', map quotemeta, keys %asciify;
my $re = qr/[$pat]/;

sub fix_chars {
    my ($s) = @_;
    $s =~ s/($re)/$asciifi{$1}/g;
    return $s;
}

つまり、Text::Unidecodeが必要です。


句読点のみ:

use Text::Unidecode qw( unidecode );
s/(\p{Punct}+)/ unidecode($1) /eg;
于 2013-02-10T00:29:12.797 に答える