[プログラミング]の検索結果
まずカタカナより比較的プログラミングしやすそうな英数字の全角半角変換から作成します。
半角から全角への変換の処理手順は、
・半角英数字の場合は、同じ全角英数字に置き換えて戻り値として返す文字列に連結
・それ以外の文字の場合はそのまま戻り値として返す文字列に連結
また、全角から半角への変換の処理手順は、
・全角英数字の場合は、同じ半角英数字に置き換えて戻り値として返す文字列に連結
・それ以外の文字の場合はそのまま戻り値として返す文字列に連結
となります。
文字コードはそれぞれ以下の通りですので、これらに該当する文字があったら置き換えを行います。
半角数字:0 - 9
30 - 39
全角数字:0 - 9
EFBC90 - EFBC99
2バイト目まではEFBC
半角アルファベット大文字:A - Z
41 - 5A
全角アルファベット大文字:A - Z
EFBCA1 - EFBCBA
2バイト目まではEFBC
半角アルファベット小文字:a - z
61 - 7A
全角アルファベット小文字:a - z
EFBD80 - EFBD9A
2バイト目まではEFBD
以下が英数字の半角から全角へ、全角から半角への変換を行うコード(プログラム)です。
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
my $hanAlnum = "ABCDEい12345あabcde";
my $zenAlnum = "ABCDEい12345あabcdeカ";
my $zenstr = han2zen_alnum($hanAlnum);
Encode::from_to($hanAlnum, 'utf8', 'cp932');
Encode::from_to($zenstr, 'utf8', 'cp932');
print "$hanAlnum ---> $zenstr\n";
my $hanstr = zen2han_alnum($zenAlnum);
Encode::from_to($zenAlnum, 'utf8', 'cp932');
Encode::from_to($hanstr, 'utf8', 'cp932');
print "$zenAlnum ---> $hanstr\n";
# UTF-8でエンコードされた半角英数字を全角英数字に変換する
sub han2zen_alnum {
my ($src) = @_;
my $srclen = length($src);
my $pos = 0;
my $dest = '';
while ($pos < $srclen) {
my $code = ord substr($src, $pos, 1); # 先頭のASCIIコード値を取得
my $bytelen = _bytesize($code);
my $lastbyte = 0;
my $bytechar = '';
my $flagged_utf8 = '';
if ($code >= 0x30 && $code <= 0x39) { # 数字
$lastbyte = 0x90 + ($code - 0x30);
$bytechar = pack("C3", 0xEF, 0xBC, $lastbyte);
$dest .= $bytechar;
}
elsif ($code >= 0x41 && $code <= 0x5A) { # 大文字英字
$lastbyte = 0xA1 + ($code - 0x41);
$bytechar = pack("C3", 0xEF, 0xBC, $lastbyte);
$dest .= $bytechar;
}
elsif ($code >= 0x61 && $code <= 0x7A) { # 小文字英字
$lastbyte = 0x81 + ($code - 0x61);
$bytechar = pack("C3", 0xEF, 0xBD, $lastbyte);
$dest .= $bytechar;
}
else {
$dest .= substr($src, $pos, $bytelen);
}
$pos += $bytelen;
}
return $dest;
}
# UTF-8でエンコードされた全角英数字を半角英数字に変換する
sub zen2han_alnum {
my ($src) = @_;
my $srclen = length($src);
my $pos = 0;
my $dest = '';
while ($pos < $srclen) {
my $code = ord substr($src, $pos, 1); # 先頭のASCIIコード値を取得
my $bytelen = _bytesize($code);
my $hit = 0;
if ($code == 0xEF) { # 全角英数の場合は1バイト目がEF
my $code2 = ord substr($src, $pos + 1, 1); # 2バイト目
my $code3 = ord substr($src, $pos + 2, 1); # 3バイト目
if ($code2 == 0xBC) {
if ($code3 >= 0x90 && $code3 <= 0x99) {
$dest .= chr(0x30 + ($code3 - 0x90));
$hit = 1;
}
elsif ($code3 >= 0xA1 && $code3 <= 0xBA) {
$dest .= chr(0x41 + ($code3 - 0xA1));
$hit = 1;
}
}
elsif ($code2 == 0xBD) {
if ($code3 >= 0x80 && $code3 <= 0x9A) {
$dest .= chr(0x61 + ($code3 - 0x80));
$hit = 1;
}
}
}
if(!$hit) {
$dest .= substr($src, $pos, $bytelen);
}
$pos += $bytelen;
}
return $dest;
}
# 文字のバイト長を求める
sub _bytesize {
my $code = shift;
my $size = 1;
if (0x80 & $code) { # 1バイト文字以外
$code <<= 1;
for my $i (2 .. 8) {
$size++;
$code <<= 1;
last if (!(0x80 & $code));
}
}
return $size;
}
Perlで全角半角変換を行う主な方法としては、
・標準モジュールのEncode.pmを使う
・Unicode::Japaneseモジュールを使う
・全角半角の変換に特化したLingua::JA::Regular::Unicodeモジュールを使う
などがあります。
Encode.pmは標準モジュールですので比較的使いやすいですが、euc-jp以外の文字エンコードの場合はeuc-jpに変換する必要があります。
Unicode::Japaneseモジュールは、現状では一番使いやすいと思われますが、標準モジュールではないのでレンタルサーバーで動かすWebアプリケーションではちょっと使いにくい面もあります。
Lingua::JA::Regular::Unicodeは、全角半角の変換に特化したモジュールですので非常に軽量ですが、全角半角の変換以外の処理を考えるとuse utf8;しないと動作しないというのはかなり面倒です。
これらのモジュールを使った全角半角の変換のコードについては、以下のブログ記事などに記述されています。
Encodeで全角半角変換
Perl で半角カナと全角カナの変換をする : Serendip - Webデザイン・プログラミング
perl - で全角半角変換をモダンに行う
しかし、いずれの方法もそれぞれ若干使いにくい面があるので、モジュールを使わずに自力で全角半角変換を行う方法を考えたいと思います。
プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)
技術評論社 著者:矢野 啓介
amazon.co.jpのカスタマーレビューを見る
powered by amalink
自然言語処理(しぜんげんごしょり、natural language processing、NLP)は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術であり、人工知能と言語学の一分野。「計算言語学」(computational linguistics)も同じ意味だが、自然言語処理が工学的な視点からの言語処理をさすのに対して、計算言語学は言語学的視点を重視する手法をさす事が多い。データベース内の情報を自然言語に変換したり、自然言語の文章をより形式的な(コンピュータが理解しやすい)表現に変換するといった処理が含まれる。
自然言語処理の基礎技術にはさまざまなものがあるが、現在のところ、日本語を処理する基礎技術としては、形態素解析、構文解析、語義の曖昧性解消照応解析が主に研究されている。
自然言語処理 - Wikipedia
言語処理学会 The Association for Natural Language Processing
自然言語処理ツール
Python による日本語自然言語処理
Perl で自然言語処理
入門 自然言語処理
オライリージャパン 著者:Steven Bird,Ewan Klein,Edward Loper
amazon.co.jpのカスタマーレビューを見る
powered by amalink
アクセスランキング
今日のアクセスランキング TOP 10
今月のアクセスランキング TOP 10
- 2NN 2ちゃんねるニュース速報+ナビ (3273 PV)
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (488 PV)
- 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (91 PV)
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (89 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (70 PV)
- Million Dollar Ver 1.09向けの収益性を重視したゴールド(Gold、XAUUSD)ロングセットファイル (64 PV)
- 無料のMT4向けナンピンマーチン爆益(爆損)EA「Jipangu(ジパング)」 (62 PV)
- 仲値トレードが簡単にできる無料EA「NAKANE3 Ver 2.04」 #MT4 (59 PV)
- [FX]裁量ポジションを簡単に管理できるMT4向け無料の裁量補助EA「PositionKeeper」 (51 PV)
- 2chまとめサイト - 痛いニュース(ノ∀`) (46 PV)
アクセス統計
ディレクトリ
関連サイト