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