ただし、法執行機関による公共の場での生体認証技術の利用は完全には禁止されず、厳密に定義された犯罪リストに対してはAIの利用が許可されます。具体的には「重大な犯罪を犯した疑いのある人物、あるいは有罪判決を受けた人物に対象を絞った捜査」では、AIテクノロジーの使用が許可されます。
生体認証システムでAIを利用可能となる具体的なケースは以下の通り。
・被害者に的を絞った捜索(誘拐、人身売買、性的搾取)
・特定のテロリズムの脅威の防止
・規制に記載されている特定の犯罪(テロリズム、人身売買、性的搾取、殺人、誘拐、強姦、武装強盗、犯罪組織への参加、環境犯罪など)のいずれかを犯した疑いのある人物の特定あるいは位置特定
さらに、高リスクに分類されたAIシステム(健康、安全、基本的権利、環境、民主主義、法の支配に重大な害を及ぼす可能性があるもの)について、明確な義務が課せられることとなっています。欧州議会は「他の要件の中でも特に、保険および銀行セクターに適用される必須の基本的権利影響評価を含めることに成功しました」と説明しました。また、「選挙の結果や有権者の行動に影響を与えるために使用されるAIシステム」も、高リスクAIシステムに分類されるそうです。国民は高リスクAIシステムに分類されたAIに対して苦情を申し立てたり、国民の権利に影響を与えるリスクの高いAIシステムに基づく決定について説明を受けたりすることが可能です。
⇧う~む、犯罪組織を撲滅する用途として普及するのは喜ばしいところですが、特定の機関が支配的にならないように、監視する中立な機関が必要そうですかね。
Linuxの文字コードはUTF-8が標準?
ネットの情報だと、
⇧ localeコマンドで確認できるってことなんかね?
確認してみました。
⇧ UTF-8となってますな。
シェルスクリプトでShift-JISのCSVファイルのヘッダー行を判定するには
で、日本特有の問題なのかもしれんけど、文字コードが
- UTF-8
- Shift-JIS
のファイルが混在することあるあるだと思いますと。特に、行政が公開してるCSVファイルとかは、文字コードがShift-JISとか利用されてるケースが多いイメージ。
何が困るって、文字コードがShift-JISのCSVファイルの列(カラム)の値が日本語だと漏れなく文字化けが起こるというね...
つまり、文字コードがShift-JISのCSVファイルの1行目のヘッダー行の列(カラム)名が日本語とかになっていると、文字化けのせいでヘッダー行の判定が上手くいかないんですな...
そもそもとして、ネットの情報だと、1行目がヘッダー行である前提の話しか無いので、ヘッダー行の有無の判定については無頓着なんですな...
何故、暗黙的に1行目が必ず正確なヘッダー行であると確定した前提になっていることに対して疑問を抱かないのか不思議だ...
気を取り直して、
⇧ 上記サイト様によりますと、Shift-JISの文字コードになっているファイルをUTF-8の文字コードのファイルに変換できるらしい。
なので、CSVファイルのヘッダー行で列(カラム)名に日本語を含む場合も考慮したヘッダー行の有無判定ができそう。
で、残念ながら、nkfコマンドはLinux標準の機能ではないっぽい...
■/home/ts0818/work/test_header/check_hedaer.sh
#!/bin/bash # ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ # ■ 関数 # ■ ヘッダー行の有無をチェック # ■ 引数 # ■ param $1 CSVファイルの1行目 # ■ 戻り値 # ■ 0:ヘッダー行あり # ■ 1:ヘッダー行なし # ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ #function check_header_row(){ function check_header_row(){ local _CORRECT_HEADER_COLUMN_ARR=("日本語" "英語") local _first_row="$1" local _first_row_arr=(${_first_row//,/ }) #echo '[_CORRECT_HEADER_COLUMN_ARR]'"${_CORRECT_HEADER_COLUMN_ARR[@]}" #echo '[_first_row_arr]'"${_first_row_arr[@]}" # ヘッダー行の列(カラム)の数をチェック if [[ "${#_CORRECT_HEADER_COLUMN_ARR[@]}" -ne "${#_first_row_arr[@]}" ]]; then #echo "length not match" # ヘッダー行は存在しない echo 1 return fi # ヘッダー行の列(カラム)の数だけ繰り返し for column_idx in ${!_CORRECT_HEADER_COLUMN_ARR[@]} do correct_column=$(echo -n "${_CORRECT_HEADER_COLUMN_ARR[${column_idx}]}") file_column=$(echo -n "${_first_row_arr[${column_idx}]}") # 列(カラム)名が異なっている場合 if [[ "${file_column}" != "${correct_column}" ]]; then #echo '${_first_row_arr[${column_idx}]}'"${_first_row_arr[${column_idx}]}" #echo '${_CORRECT_HEADER_COLUMN_ARR[${column_idx}]}'"${_CORRECT_HEADER_COLUMN_ARR[${column_idx}]}" # ヘッダー行は存在しない echo 1 return fi done # ヘッダー行が存在する echo 0 } # ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ # ■ メイン処理 # ■ # ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ readonly TARGET_DIR=/home/ts0818/work/test_header/data readonly ENCODING_UTF8=utf-8 tmp_file_csv=tmp_file.csv first_row="" # 対象のファイルが存在する for file in $(\find ${TARGET_DIR} -maxdepth 1 -name '*.csv') do # ファイルの文字コード判定 #file_encoding=$(nkf -g ${file}) file_encoding=$(file -i ${file} | awk '{print $3}' | awk -F'=' '{print $2}') echo '[file_encoding]'"${file_encoding}" # ファイルの文字コードがUTF-8以外の場合 if [[ "${file_encoding}" != "${ENCODING_UTF8}" ]]; then #nkf -wd ${file} > ${tmp_file_csv} # 文字コードUTF-8で一時ファイルに書き込み iconv -f SJIS -t UTF-8 ${file} > ${tmp_file_csv} # 1行目を取得(改行コードは削除) first_row=$(head -n 1 "${tmp_file_csv}" | tr -d '\r' | tr -d '\n') # ファイルの文字コードがUTF-8の場合 else # 1行目を取得(改行コードは削除) first_row=$(head -n 1 "${file}" | tr -d '\r' | tr -d '\n') fi # ファイルが空の場合 if [[ "${first_row}" = "" ]]; then echo "[file empty]${file}" continue fi # ヘッダー行有無のチェック is_header=$(check_header_row "${first_row}") echo '[is_header]'"${is_header}" # ヘッダー行あり if [[ "${is_header}" = "0" ]]; then echo "[header exist]${file}" # ヘッダー行なし else echo "[header not exist]${file}" fi # 一時ファイルを削除 rm -f "${tmp_file_csv}" done
実行すると、
⇧ ヘッダー行の有無を判定できていそうです。
改行コードの削除については、
⇧ 上記サイト様を参考にさせていただきました。
何と言うか、ただ、ヘッダー行の有無を確認したいだけなのに、シェルスクリプトだとかなり苦肉の策的な手段にならざるを得ないの何とかならんもんか...
英語だと、こんな苦労をしないので済むと思われるから、英語以外の言語を扱う国は四苦八苦する感じなんかね...
それにしても、何か、もっと良い方法はありそうな気はするんだが、ネット上に情報が無いから、分からん...
シェルスクリプト相変わらず、カオスだ...
毎度モヤモヤ感が半端ない...
今回はこのへんで。