Licsu-Web データ自由自在! 「図書系職員のためのアプリケーション講習会」
Licsu-Web のデータを自在に 加工してみましょう! Licsu-Web からデータを取り出して、オリジ ナル帳票を作成したり、 Excel で集計しやす いように加工してみましょう。 ここで、テキスト処理(=図書館でもっとも 応用のきく技術)について、まずは学んでく ださい。 うまく作れたら、そのまま実業務で使ってし まいましょう!
実はパターン化できるテキスト 処理 図書館の業務で必要とされることの多い技術 は、テキストデータの加工です(経験談)。 ある形式のテキストデータを別形式に加工す ることを、「フィルタ」といいます。 この「フィルタ」プログラムの作り方は、使 用するプログラミング言語に関係なく、ほぼ 定型化できます。これについて、まず覚えて しまいしょう!
項目ごとにデータ処理 (文字列の置換・集計など) 「フィルタ」プログラムの基本編! 氏名職業配属血液型 コナン・ドイ ル 小説家???よくわんない型 氏名職業配属血液型 前田朗図書館屋社研図書室 O型O型 1行のデータの項目わけ 不要行(あれば)の除去 書式を指定して出力 前田朗, 図書館屋, 社会科学研究所, O 型 コナン・ドイル, 小説家, ???, よくわかんない型 (以下、略) 氏名職業配属血液型 前田朗さん図書館司書社会科学研究所 図書室 O 型かも 1行づつ取り出して処理 1行のデータの項目わけ不要行(あれば)の除去 項目ごとにデータ処理 (文字列の置換・集計など) 書式を指定して出力 1行づつ取り出して処理 氏名 --- 前田朗さん 職業 --- 図書館司書 配属 --- 社会科学研究所図書室 血液型 --- O 型かも ・ 文字列加工の ときは、1行 を読んで出力 で OK 。集計の 場合は、全行 を読んでから 出力する 前田朗, 図書館屋, 社会科学研究所, O 型 1行づつ取り出し
Licsu-Web の業務データを 取り出してみよう 個人情報(利用者 ID) などの扱いには十分注意しましょう。 危ないと思ったら取り出さないほうが安全です。 汎用ファイル 出力 帳票(拡張子 ert) の ファイル Licsu-Web サーバ テキスト データ (XML 形式 ) です。 帳票内の 文字を書 き換える こともで きます テキスト データ(カ ンマ or タブ 区切り) です。 単純なデー タ構造です が、扱いは 容易です。
課題 0 自分の担当業務のデータを汎用ファイ ル出力で取り出してみましょう。出力 時のオプション設定は次のようにしま す。 – エンコード → UTF-8 – 区切り文字 → タブ – 括り文字出力 → しない – ヘッダ出力 → する
テキスト処理にはスクリ プト言語を使おう 図書館では、テキスト処理ができると強力 いまどきの軽量言語 (LL) は、本格システムまで作れ る! コマンド(命令文)と条件式の書き方を覚えれば、 とりあえず使える。 スクリプト言語の種類 –Perl –Ruby – などなど
Perl のインストール テキストデータの加工の定番ソフト Perl をイ ンストールしましょう( Licsu-Web レンタル 端末には、既にインストールされています) 以下のサイトから、 Windows 版 (MSI がお勧 め)をダウンロードして PC にインストールし てください。 – ad.htmlhttp:// ad.html
多言語エディタのインストール テキスト処理は、 UNICODE (utf8) で行うの がわかりやすいです。 Windows 標準のメモ帳でも utf8 の読み書き ができますが、大き目のファイルには対応し ていません。 多言語対応エディタ (EMEditor )を次のサイ トからインストールしてください。 –
Perl ことはじめ ~その1~ エディタでスクリプトを記述 – データを一行づつ読み込む ($line は変数 ) while ($line = <>) { ここに1行づつの処理を記述 } – データを書き出す print $line; – 適当なファイル名で保存 (try.pl など) Windows のコマンドプロンプトから、コマン ド入力で実行 perl try.pl 入力ファイル > 出力ファイル エディタで出力ファイルを開いて、結果を確 認 コマンドの末尾は、 ; で終わりにします。 しかし、制御文 の} のあとには ; 不要です。
課題 1 課題 0 で出力した「汎用ファイル出力」 データを、別ファイルに書き出してみ ましょう! 1行づつ取り出して処理 1行のデータの項目わけ不要行(あれば)の除去 項目ごとにデータ処理 (文字列の置換・集計など) 書式を指定して出力 1行づつ取り出して処理
Perl ことはじめ ~その2~ 条件によって処理をわけよう –If 文の使用 if ( 条件式 ) { 条件にマッチしたときの処理 } – 文字列のパターンで条件式を作る $line =~ /ser6015/; –( 「文字列 ser6015 を含んでいる行」という条件です) 情報検索でいうトランケーションのような、さらに高度な指 定も可能です。 –. → 任意の 1 文字にマッチ –[A-z] → アルファベット1文字にマッチ –\t → タブ1文字にマッチ – などなど
課題 2 課題 1 のスクリプトを修正し、特定の文 字列が含まれているときのみ、ファイ ルに出力するようにしましょう! 1行づつ取り出して処理 1行のデータの項目わけ不要行(あれば)の除去 項目ごとにデータ処理 (文字列の置換・集計など) 書式を指定して出力 1行づつ取り出して処理
Perl ことはじめ ~その 3 ~ 文字を別の文字におきかえよう – 文字列のパターンで条件式を作る(「その2」の復習) $line =~ /ser6015/; –( 「文字列 ser6015 を含んでいる行」という条件です) 情報検索でいうトランケーションのような、さらに高度な指 定も可能です。 –. → 任意の 1 文字にマッチ –[A-z] → アルファベット1文字にマッチ –\t → タブ1文字にマッチ – などなど – その応用で、条件に当てはまる部分を別の文字にする $line =~ s/ser6015/ ■ 雑誌作業 ID[ 社研 ] ■ /; – 変数 $line のデータそのものが書き換わります!
課題 3 課題 1 のスクリプトを修正し、特定の文 字列を別の文字列に置換して、ファイ ルに出力するようにしましょう! 1行づつ取り出して処理 1行のデータの項目わけ不要行(あれば)の除去 項目ごとにデータ処理 (文字列の置換・集計など) 書式を指定して出力 1行づつ取り出して処理
Perl ことはじめ ~その 4 ~ – 特定のフィールドのデータを出力しよう データを区切り文字で分割するには、 split 関数を使いま す。たとえば、変数 $line がタブ区切りデータであれば、 次のように使います。 = split( “ \t ”, $line); は配列(リスト)です。 Perl がついた変数名のものが配列扱いになります。たとえ ば、配列の第一番目の要素を取り出すには次のようにし ます。 –$line[0] » 配列のn番目の要素を取り出すときは、 [] 内にn - 1 の数値を指定します。
課題 4 課題 3 のスクリプトを修正し、特定の フィールドのみ指定して、ファイルに 出力するようにしましょう! 1行づつ取り出して処理 1行のデータの項目わけ不要行(あれば)の除去 項目ごとにデータ処理 (文字列の置換・集計など) 書式を指定して出力 1行づつ取り出して処理
Perl ことはじめ ~その 5 ~ – 数値データを集計しよう Perl は数値データを扱うこともできます。たと えば、変数「集計結果」に変数「 A 」、変数 「 B 」のデータを加えるには次のようにします。 – 集計結果 = 変数 A + 変数 B ; 次の略記法も便利です。 – 変数 A += 変数 B ; # 変数「 A 」に変数「 B 」を加え る – 変数 A++ ; # 変数「 A 」に1を加える
課題 5 課題 4 のスクリプトを修正し、特定の数 値のフィールドのみ出力するようにし ましょう。 さらに、数値の合計を出力するように 直しましょう。 1行づつ取り出して処理 1行のデータの項目わけ不要行(あれば)の除去 項目ごとにデータ処理 (文字列の置換・集計など) 書式を指定して出力 1行づつ取り出して処理
Perl ことはじめ ~その 6 ~ – ハッシュを使い条件ごとに集計しよう Perl は「ハッシュ」という特殊な変数を使うことができます。 先の配列と似ていますが、数値によるインデックスではなく、 文字列を指定できます。 – ハッシュ全体 → %data – ハッシュの一要素 → $data{ ‘ test ’ } »{} の中に文字インデックスを入れます。上記は文字列ですが、 変数でも大丈夫です。 – ハッシュの全データを出力(定番の処理なので覚えてしまいしょ う) »foreach $key (keys %data) { » print $data{$key}; » print “ \t ” ; # タブを出力 » print $key; » print “ \n ” ; # 改行指定 »}
課題 6 課題 5 のスクリプトを修正し、たとえば 作業 ID 別に集計を出すようにしてみま しょう。 1行づつ取り出して処理 1行のデータの項目わけ不要行(あれば)の除去 項目ごとにデータ処理 (文字列の置換・集計など) 書式を指定して出力 1行づつ取り出して処理
Perl ことはじめ ~その 7 ~ –HTML での出力 HTML はテキストデータですので、 Perl で生成 することができます。 入力データの改行の削除 –chomp $line; 文字の出力 –print “ …. “ ; 改行の出力 –print “ \n ” ;
課題 7 課題 6 のスクリプトを修正し、集計を HTML の表形式で出すようにしてみま しょう。 さらに進んで、集計にこだわらず汎用 ファイル出力から、実用的な HTML 形 式の帳票を作成してみましょう。 うまく、作れたものについては、 Web アプリケーションの形にして公開しま す。
Perl ことはじめ ~その 8 ~ –CGI で動作させる Perl を使い、 Web ブラウザ上でシステムを作ることがで きます。そのための仕組みとして古くからあるのが、 CGI です。 – 先の課題のスクリプトを発展させて、汎用ファイ ルの集計プログラムを作ることもできます。 form.htmlhttp://gensen.dl.itc.u-tokyo.ac.jp/test/licsu- form.html – このスクリプトですが、別紙のとおり、 A4 用紙 たった1ページに収まるくらいの分量です。
Perl ことはじめ ~その 9 ~ – さらに Perl を学ぶには 「超初心者による Perl 独学」 – 「 Perl 基礎入門」 – –Excel 形式での出力 Perl に Excel 用のモジュール(プラグイン)を 追加すれば、実現可能です。チャレンジした いかたは、講師までお申し出ください。