AIは111以上の漢数字に弱い

刑法や地方自治法等の条文の機械学習をAIがしてくれないのは、Ngramのベクトル化の影響なのか定かでないが、とりあえず条文の漢数字を変換するプログラムを作成しナレッジベースにぶち込むことにしました。

phpの漢数字変換プログラム:kanjinum.phpは以下。
(Usage:php kanjinum.php 刑法.html > 刑法_漢数字変換.html)

<?php
if (!function_exists('mb_str_split')) {
    function mb_str_split($string, $length = 1, $encoding = 'UTF-8') {
        $result = [];
        $strlen = mb_strlen($string, $encoding);
        for ($i = 0; $i < $strlen; $i += $length) {
            $result[] = mb_substr($string, $i, $length, $encoding);
        }
        return $result;
    }
}

// 漢数字 → 数字変換関数(簡易版)
function kanjiToNumber($kanji) {
    $nums = ['〇'=>0, '一'=>1, '二'=>2, '三'=>3, '四'=>4, '五'=>5, '六'=>6, '七'=>7, '八'=>8, '九'=>9];
    $units = ['十'=>10, '百'=>100, '千'=>1000];
    $largeUnits = ['万'=>10000, '億'=>100000000];

    // mb_str_split の代替
    if (!function_exists('mb_str_split')) {
        function mb_str_split($string, $length = 1, $encoding = 'UTF-8') {
            $result = [];
            $strlen = mb_strlen($string, $encoding);
            for ($i = 0; $i < $strlen; $i += $length) {
                $result[] = mb_substr($string, $i, $length, $encoding);
            }
            return $result;
        }
    }

    $chars = mb_str_split($kanji);
    $result = 0;
    $section = 0;
    $number = 0;

    foreach ($chars as $char) {
        if (isset($nums[$char])) {
            $number = $nums[$char];
        } elseif (isset($units[$char])) {
            $unit = $units[$char];
            if ($number === 0) $number = 1;
            $section += $number * $unit;
            $number = 0;
        } elseif (isset($largeUnits[$char])) {
            $unit = $largeUnits[$char];
            if ($number === 0 && $section === 0) $section = 1;
            $result += ($section + $number) * $unit;
            $section = 0;
            $number = 0;
        } else {
            // 未知の文字は無視
        }
    }

    $result += $section + $number;
    return $result;
}

// コマンドライン引数からファイルパス取得
if ($argc < 2) {
    fwrite(STDERR, "Usage: php convert.php \n");
    exit(1);
}

$filePath = $argv[1];

// ファイル存在チェック
if (!file_exists($filePath)) {
    fwrite(STDERR, "Error: File not found - $filePath\n");
    exit(1);
}

// HTMLファイル読み込み
$html = file_get_contents($filePath);

// 漢数字を検出して変換
$convertedHtml = preg_replace_callback('/[〇一二三四五六七八九十百千万]+/u', function($matches) {
    return kanjiToNumber($matches[0]);
}, $html);

// 標準出力に表示
echo $convertedHtml;
?>

bonkura-admin について

「盆暗」とは、物事の見通しが効かない様を意味しますが、「盆の上の勝負に暗い」という意味もあるようです。住民訴訟はすべて敗訴しました。裁判所が「盆の上」であり、裁判官が「振り師」であることを知らず、最高裁まで住民訴訟した当方は、物事の見通しが出来ない盆暗な情報処理屋です。
カテゴリー: 管理人 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です