Licsu-Webデータ自由自在!

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