[ブログ]の検索結果


日本語の文章では半角の英数字と全角の英数字、また、半角のカタカナと全角のカタカナが混在していることがよくあります。意味は半角でも全角でも同じですので、コンピュータで処理する場合はどちらかに統一してから処理したいところです。

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

[2247] Posted by kagahiro at 2012/12/14 23:52:52
0 point | Link (4) | Trackback (0) | Comment (0)

Perlのlength関数ではバイト単位となるので、UTF-8でエンコードされている場合、漢字、ひらがな、カタカナなどは1文字で3となってしまいます。

ブログなどのアプリケーションのテキスト処理ではそれでは不都合な場合もことも多いので、半角英数も全角文字(漢字、ひらがな、カタカナなど) も1文字としてカウントする関数を作成することにします。

UTF-8では、

1バイト目の先頭ビットが0の場合は1バイト文字
1バイト目の先頭から3ビットが110の場合は2バイト文字
1バイト目の先頭から4ビットが1110の場合は3バイト文字
1バイト目の先頭から5ビットが11110の場合は4バイト文字
1バイト目の先頭から6ビットが111110の場合は5バイト文字
1バイト目の先頭から7ビットが1111110の場合は2バイト文字

という仕様ですので、1バイト目のビットの状態を調べることによって、その文字が何バイトかを調べることができます。

以下のコードでは、この仕様にもとづいて全角文字を含む文字列の文字数を取得しています。

#!/usr/bin/perl

use strict;
use warnings;

my $testAscii = "ABCDEFG";
my $testHira  = "あいうえお";
my $testKata  = "アイウエ";
my $testKanji = "愛々木";
my $testAll = "ABCDEFGあいうえおアイウエオ愛夢佐々木";

print "length($testAscii) = ".length($testAscii), "\n";
print "strlen_utf8($testAscii) = ".strlen_utf8($testAscii), "\n";

print "length($testHira) = ".length($testHira), "\n";
print "strlen_utf8($testHira) = ".strlen_utf8($testHira), "\n";

print "length($testKata) = ".length($testKata), "\n";
print "strlen_utf8($testKata) = ".strlen_utf8($testKata), "\n";

print "length($testKanji) = ".length($testKanji), "\n";
print "strlen_utf8($testKanji) = ".strlen_utf8($testKanji), "\n";

print "length($testAll) = ".length($testAll), "\n";
print "strlen_utf8($testAll) = ".strlen_utf8($testAll), "\n";

exit;

# UTF-8でエンコードされた文字列の文字数を取得する。
sub strlen_utf8 {
    my ($text) = @_;

    my $textlen = length($text);
    my $pos = 0;
    my $count = 0;

    while ($pos < $textlen) {
        my $code = ord substr($text, $pos, 1); # 先頭のASCIIコード値を取得
        my $bytelen = _bytesize($code);
        $pos += $bytelen;
        $count++; # 文字数をカウント
    }

    return $count;
}

# 文字のバイト長を求める
sub _bytesize {
    my ($code) = @_;
    my $size = 1;
    if (0x80 & $code) { # 1バイト文字以外
        $size++;
        $code <<= 1;
        for my $i (2 .. 8) {
            last if (!(0x80 & $code));
            $size++;
            $code <<= 1;
        }
    }
    return $size;
}

strlen_utf8関数では、substr関数を使用して1バイト目のASCIIコード値を取得し、 _bytesize関数を呼び出して文字のバイト数を求め、1文字分の処理を行うたびに文字数をカウントアップしています。

_bytesize関数ではパラメータで渡されたコード値の場合の文字のバイト数を、コード値のビットの状態から判定し 戻り値として返しています。

ゼロからわかる Perl言語超入門
技術評論社 著者:高橋 順子


amazon.co.jpのカスタマーレビューを見る
powered by amalink

[2243] Posted by kagahiro at 2012/12/12 11:56:21
1 point | Link (3) | Trackback (0) | Comment (1)

ベイジアンフィルタは、ナイーブベイズ(Naive Bayes)というアルゴリズムを利用して、対象となるデータを解析・学習し分類する為のフィルタで、学習量が増えるとフィルタの分類精度が上昇するという特徴をもつ。電子メールのスパム判定やフィルタリングソフト、ブログのカテゴリ分類などに利用されている。

ベイジアンフィルタ
第3回 ベイジアンフィルタを実装してみよう:機械学習 はじめよう|gihyo.jp … 技術評論社
「日本語テキストを分類するベイジアンフィルタ」を簡単につくるyo
スパム対策に欠かせないベイズ理論とは? (1/2)
スパム対策に欠かせないベイズ理論とは? (2/2)
A Plan for Spam(スパムへの対策)

ハッカーと画家 コンピュータ時代の創造者たち
オーム社 著者:ポール グレアム


amazon.co.jpのカスタマーレビューを見る
powered by amalink

[2241] Posted by kagahiro at 2012/12/10 23:50:05
0 point | Link (1) | Trackback (0) | Comment (0)

Yahoo!検索チームがブログで現在無料で提供されている下記の6つの検索Web APIが来年(2013年)3月頃を目途に全て利用できなくなり、再編されることを明らかにした。新APIは全て有料プランとなり、停止する日付の詳細...
[2236] Posted by kagahiro at 2012/12/03 13:48:12
1 point | Link (3) | Trackback (0) | Comment (1)

11月中旬ごろからFC2ブログの一部の記事がGoogleにインデックスされなかったことから、FC2ブログに対してGoogleがなんらかのペナルティを与えたのではないかという憶測も出るなど、FC2ブログのユーザーに同様が広がっ...
[2235] Posted by kagahiro at 2012/11/28 11:08:13
0 point | Link (2) | Trackback (0) | Comment (0)

Windowsストアは、マイクロソフトがて運営するWindows 8とWindows RT向けアプリ(ソフトウェア)のマーケットプレイスで、有料アプリはもちろん多数の無料アプリのほか体験版なども豊富に揃っている。ストア内を検索...
[2234] Posted by kagahiro at 2012/10/26 18:16:54
0 point | Link (2) | Trackback (0) | Comment (0)

ぼくはまちちゃんという方がライブドアの一部人気ブログのように、スクロールしてもサイドバーの広告が固定して表示されるようなJavaScriptを公開ししていますが、Googleの見解によるとこれはAdSenseポリシー違反にな...
[2223] Posted by kagahiro at 2012/08/31 17:44:06
0 point | Link (1) | Trackback (0) | Comment (0)

夏にベータテスト開始で、秋には正式リリースか。もうカレンダー上は夏だからもうすぐベータ版が出るのかな。シックス・アパートは今秋、Movable Type 5 の次期バージョンにあたるMT 5.2 を出荷する予定です。Movabl...
[2209] Posted by kagahiro at 2012/06/06 16:21:00
0 point | Link (2) | Trackback (0) | Comment (0)

どうやらネットでwarn.txtというのが話題になっているらしい。今話題のwarn.txtをまとめてみました。内容はクリックして自身で確認してください。1クリックを惜しむと、芸人気取りの素人さんに低リテラシーと論難され...
[2205] Posted by kagahiro at 2012/06/05 00:17:35
0 point | Link (0) | Trackback (0) | Comment (0)

削除されました
[2204] Posted by kagahiro at 2012/06/05 00:16:43
0 point | Link (0) | Trackback (0) | Comment (0)

|< 先頭へ  < 前へ  1 2 3 4 5  次へ >


アクセスランキング

今日のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (75 PV)
  2. Google News (グーグルニュース)日本版 (13 PV)
  3. Dailymotion(デイリーモーション) - 動画共有サイト (9 PV)
  4. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (8 PV)
  5. [食べ物]七草粥(ななくさがゆ) (5 PV)
  6. CommentPP 1.3のリリース (5 PV)
  7. 「CASH(キャッシュ)」アイテム(ブランド品やガジェット)の写真を撮れば審査なしで現金化できるサービス (4 PV)
  8. [将棋]中学生プロ棋士「藤井聡太四段」が上州YAMADAチャレンジ杯で3連勝し連勝記録を23連勝に伸ばす (4 PV)
  9. ウェブページを1回だけリロード(再表示)する方法 (3 PV)
  10. Google(グーグル) 日本版 (3 PV)

今月のアクセスランキング TOP 10

  1. グーグルニュース日本語版が見れない (3271 PV)
  2. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (3225 PV)
  3. Google News (グーグルニュース)日本版 (1100 PV)
  4. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (292 PV)
  5. 「CASH(キャッシュ)」アイテム(ブランド品やガジェット)の写真を撮れば審査なしで現金化できるサービス (192 PV)
  6. Google(グーグル) 日本版 (170 PV)
  7. ウェブページを1回だけリロード(再表示)する方法 (166 PV)
  8. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (136 PV)
  9. 将棋ウォーズスーパープレミアムプラン販売開始、香川愛生女流三段のボイスが選択可能 #将棋 (119 PV)
  10. アマゾンで買った商品(荷物)が届かない #デリバリープロバイダ (107 PV)

アクセス統計

ディレクトリ

関連サイト