[レビュー]の検索結果


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)

PHPの場合は、ズバリ10進数を2進文字列に変換できるdecbin関数があるので、decbin関数を使用すればいいのですが、 もちろん、Perlの場合と同様にビット演算で2進文字列に変換することもできます。以下は、そのサンプルコードです。

<?php

// 'A'のアスキーコード値を取得
$asciicode = ord('A');

// PHPのdecbin関数で2進文字列に変換し、sprintfで整形
$binarystr = sprintf("%08.8s", decbin($asciicode));
print $binarystr . " (1)\n"; // for debug

// ビット演算で2進文字列に変換
$binarystr = _binstr($asciicode);
print $binarystr . " (2)\n"; // for debug

function _binstr($code) {
    $str = '';
    for ($i = 0; $i < 8; $i++) {
        $str .= (0x80 & $code) ? '1' : '0';
        $code <<= 1;
    }
    return $str; 
}
?>

このスクリプトをコマンドラインで実行すると次のように表示されます。

C:\xampp\htdocs\sample>\xampp\php\php binstr.php
01000001 (1)
01000001 (2)

PHPハンドブック (ハンドブックシリーズ)
ソフトバンククリエイティブ 著者:柏岡 秀男


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

[2242] Posted by kagahiro at 2012/12/11 19:33:29
0 point | Link (1) | Trackback (0) | Comment (0)

ベイジアンフィルタは、ナイーブベイズ(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)

自然言語処理(しぜんげんごしょり、natural language processing、NLP)は、人間が日常的に使っている自然言語コンピュータに処理させる一連の技術であり、人工知能と言語学の一分野。「計算言語学」(computatio...
[2240] Posted by kagahiro at 2012/12/09 22:59:04
0 point | Link (1) | Trackback (0) | Comment (0)

Perlの関数を使用して、以下の手順で10進数を2進文字列に変換することができます。sprintf関数で10進数を16進文字列に変換pack関数で16進文字列をバイナリーにパックunpack関数で2進文字列に変換例えば、文字列の先頭...
[2239] Posted by kagahiro at 2012/12/09 20:36:29
0 point | Link (4) | Trackback (0) | Comment (0)

機械学習(きかいがくしゅう)とは、人工知能における研究課題の一 つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術や手法のこと。1959年にアーサー・サミュエルは機械学習を...
[2238] Posted by kagahiro at 2012/12/09 00:14:58
0 point | Link (10) | 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)

PC向けのOS(オペレーティングシステム)としては圧倒的なシェアを持つマイクロソフトのOS「Windows」の最新版「Windows 8(ウィンドウズ エイト)」の日本語版の販売が開始された。Windows 8(ウィンドウズ エイト)は...
[2233] Posted by kagahiro at 2012/10/26 12:17:19
1 point | Link (3) | Trackback (1) | Comment (0)

レスポンシブウェブデザイン(Responsive Web Design)は、PC、タブレット、スマートフォンなど、様々なデバイスに最適化したWebサイトを、単一のHTMLで構築するデザイン手法で、ブラウザのスクリーンサイズを基準に...
[2231] Posted by kagahiro at 2012/10/19 17:35:45
1 point | Link (4) | Trackback (0) | Comment (1)

Google検索アプライアンス(Google Search Appliance)は、検索エンジン世界最大手のGoogleが企業向けに販売しているドキュメント検索に特化したハードウェアと検索システムが一体となった製品で、ユーザーはインター...
[2229] Posted by kagahiro at 2012/10/18 11:39:32
0 point | Link (1) | Trackback (0) | Comment (0)

|< 先頭へ  < 前へ  9 10 11 12 13  次へ >


アクセスランキング

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

  1. 「やっぱりダメでした」、「Twitpic」10月25にサービス終了 (1 PV)
  2. テキスト中のキーワードをリンクするPerlサンプルスクリプト (1 PV)
  3. PostgreSQL (1 PV)
  4. RIA(Rich Internet Application、リッチインターネットアプリケーション) (1 PV)
  5. 2NN 2ちゃんねるニュース速報+ナビ (1 PV)

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

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (23 PV)
  2. FC2まとめ (15 PV)
  3. StartPage(スタートページ) - 匿名検索エンジン (8 PV)
  4. 将棋ウォーズPCブラウザ版がchrome、Firefox、edgeなどに対応 (8 PV)
  5. 2NN 2ちゃんねるニュース速報+ナビ (8 PV)
  6. 掲示板CGI ThreadPlus 1.2 のリリース (5 PV)
  7. 「Kindle for the Web」 (5 PV)
  8. 2ちゃんねる(2ch) (5 PV)
  9. 電通が2ちゃんねるを監視 「電通バズリサーチ(Dentsu Buzz Research)」 (5 PV)
  10. FC2ブログにコミュニティ機能 (4 PV)

アクセス統計

ディレクトリ

関連サイト