次のテキストがあります。
[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]
テキストには、U400~U4FFの範囲のキリル文字が含まれています。
私はアルファ以外のものを削除したいと思います。たとえば、次のようになります。 []"<> しかし、Matt Mahoneyのスクリプトを使用してPerlでこれを行う場合:http://mattmahoney.net/dc/textdata.htmlまた、次のPerl行も適用されます。
tr/a-z/ /cs;
これにより、ëなどの上記のキリル文字も削除されます。
上記の範囲に属する特定のUnicode文字を無視しながら、文字以外の文字を削除するPerlの方法はありますか?
答え1
tr/a-z/ /cs;
セットにないすべての文字を空白に置き換える必要がありますa-z
。 (末尾はセットを補完するためのものです。そうでなければからまでのすべての文字をc
置き換えます。)a
z
より具体的に説明する必要があります。s/[[:punct:]]+/ /g
すべての句読点文字シーケンスを単一のスペースに置き換え、s/[^[:alpha:]]+/ /g
すべてのアルファベット以外の文字シーケンスを単一のスペースに置き換えます。
少なくともこれはロケールによって異なりますので、PerlにUTF-8などを[:alpha:]
使用するように指示する必要があります。-C
また、[^[:alpha:]]
数字と末尾の改行も削除されます。en_US.UTF-8
Debianのロケールは次のとおりです。
$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[^[:alpha:]]+/ /g'
përgjithshme është kilometra katrorë $
$ echo '[]përgjithshme [" është "] 28.748 [< kilometra katrorë.>]' | perl -C -pe 's/[[:punct:]]+/ /g'
përgjithshme është 28 748 kilometra katrorë
$