developer.hatenastaff.com ↑こちらを読んで、↓こちらを思い出した。 end0tknr.hateblo.jp
unicode.org のお陰で、文字種の判別は随分、楽になりましたが
- 「①」「㈱」等のいわゆる機種依存文字の判別が自分の認識と異なる。
- 「A」「A」等の全角英数字の判別が自分の認識と異なる。
- 「斎藤」「斉藤」「齋藤」を簡単に同一視したい。
で、モヤモヤが解消しきれていない。地道に行くしかないんですかねぇ
参考url
- http://perldoc.jp/docs/perl/5.10.0/perlunicode.pod#Unicode32Character32Properties
- http://developer.hatenastaff.com/entry/2016/05/31/123457
- http://js-next.hatenablog.com/entry/2016/04/21/013010
- http://unicode.org/Public/UNIDATA/Scripts.txt
- http://unicode.org/Public/UNIDATA/ScriptExtensions.txt
なんとなく、確認用のscriptを書いてみたけど...
特に意味はありません。ただの写経です
#!/usr/local/bin/perl use strict; use utf8; use Encode; # http://perldoc.jp/docs/perl/5.10.0/perlunicode.pod#Unicode32Character32Properties # http://developer.hatenastaff.com/entry/2016/05/31/123457 # http://js-next.hatenablog.com/entry/2016/04/21/013010 # http://unicode.org/Public/UNIDATA/ScriptExtensions.txt main(); sub main { # chk_General_Category(); # chk_Script(); chk_Script_Extensions(); # chk_East_Asian_Width(); } sub chk_General_Category { # 一般カテゴリ my $uc_prop_type = 'General_Category'; # for my $char ( qw/A A a a あ ア ア/ ){ my @uc_prop_vals = ('Letter', #表音文字・表語文字 'UppercaseLetter', #大文字 'OtherLetter'); #他の文字 for my $uc_prop_val ( @uc_prop_vals ){ chk_unicode_prop($uc_prop_type, $uc_prop_val,$char); } } for my $char ( qw/1 1 ① 一 , . ,/ ){ my @uc_prop_vals = ('Number', 'DecimalNumber', 'LetterNumber', 'OtherNumber'); for my $uc_prop_val ( @uc_prop_vals ){ chk_unicode_prop($uc_prop_type, $uc_prop_val,$char); } } } # http://www.unicode.org/Public/UNIDATA/Scripts.txt sub chk_Script { # my $uc_prop_type = 'Script'; for my $char ( qw/亜 あ ア ア 一 ー α/ ){ my @uc_prop_vals = ('Katakana', 'Han', 'Common'); for my $uc_prop_val ( @uc_prop_vals ){ chk_unicode_prop($uc_prop_type, $uc_prop_val,$char); } } } sub chk_Script_Extensions { # my $uc_prop_type = 'Script_Extensions'; for my $char ( qw/亜 あ ア ア 一 ー α ㈱/ ){ my @uc_prop_vals = ('Hiragana', 'Katakana', 'Han', 'Common'); for my $uc_prop_val ( @uc_prop_vals ){ chk_unicode_prop($uc_prop_type, $uc_prop_val,$char); } } } sub chk_East_Asian_Width { # my $uc_prop_type = 'East_Asian_Width'; for my $char ( qw/あ ア ア ㈱ ① 1 1/ ){ my @uc_prop_vals = ('Wide', 'Narrow', 'Ambiguous', ); for my $uc_prop_val ( @uc_prop_vals ){ chk_unicode_prop($uc_prop_type, $uc_prop_val,$char); } } } sub chk_unicode_prop { my ($uc_prop_type,$uc_prop_val, $char) = @_; my $uc_prop_type_val = join('=',$uc_prop_type, $uc_prop_val); if( $char =~ m/\p{$uc_prop_type_val}/){ print encode('utf8', "'$char' = $uc_prop_type_val .\n"); return; } print encode('utf8', "'$char' ≠ $uc_prop_type_val .\n"); } 1;