CSVファイルの作成およびHTML化


last updated: 2012.01.29



ある定型のデータを元にして、それを表計算ソフトなどで読み込めるCSV形式ファイルに加工し、さらにそれをHTML化してWebで閲覧するようにするための手順を以下に記す。



【元データ】


残念ながら、世の中に、そうそう都合よく、コピライト・フリーで、しかもデータベース化できるほど整った素材(元データ)などは、転がっていない。インターネットには、確かに、そういったデータがあるにはあるが、それぞれ著作権があり、安直に再利用は出来ないのだが……。

ここでは例題として――

NLM(米国立医学図書館)のサイト http://www.ncbi.nlm.nih.gov/entrez/getids_help.htmlに、PubMed に集録されている雑誌の一覧が圧縮ファイル(欧米での標準アーカイバのPKZIP形式)でアーカイヴされている。
これを使って、Abbreviation とISSN の一覧リストを作成する。

念のために記すが、これはあくまでも「例題」であって、私的利用に供する以外の目的で行ってはならない。いくら加工整形しても、元データは元データの著作権があるのだから、以下の作業で作成した二次的なデータを(内部資料としてならば、いざしらず)、対外的な利用に供したり、ましてや、Webページに載せたりしてはならない。明白な著作権侵害行為となるので、このことは十分に留意されたい。



以下、エディタの置換機能を使って(正規表現※を援用する)、一括置換の作業を行う。

※ 正規表現に関しては、別項を参照のこと。→▼



【1】ノイズを取り除き、さらに不要な文字列を除去する。


冒頭の「     Full list of journals.」を削除(手動)。

各項目を区切る波線(-------)を除去する。

--------------------------------------------------------\n

をブランクで置換し、削除。

正規表現を使って、レコード(項目)内の不要な文字列を除去する。

ジャーナルIDを示す「JrID: 」という文字列が邪魔であるが、後半部の数列は不特定なので、通常の置換では不可能である。正規表現を使うことで、置換を可能にする。

先の方まで見ていくと、これは、複数の半角算用数字であることが判る。

正規表現では、半角英文字の複数回の繰り返しは、「[0-9+」で表現される。
また、単に文字列を取り除くだけでなく、行ごと除去したいので、末尾に改行コードを意味する正規表現の「\n」を付す。なお、文字列と数列の間の半角スペースも置換の対象となるので、範囲指定してコピーした方が、間違いがなくてよい。

以下のようになる。

JrId: [0-9]+\n

をブランクで置換し、削除。

同様に、「MedCode: 」から始まる文字列を除去する。
これは、不特定の半角英数字の繰り返しなので、正規表現では、「[A-Z 0-9]+」で表す。

MedCode: [A-Z 0-9]+\n

をブランクで置換し、削除。

念のために検索窓に「MedCode:」を入力して検索すると、先の方に、コード無しを意味する「---」という文字列が残っている。これも、除去する。

MedCode: --- \n

をブランクで置換し、削除。

同じく、NLM のIDを意味するレコードを行ごと除去する。
これも、同じ文字列の後に、複数の不特定の半角英文字の繰り返しなので、正規表現を使って除去する。

NlmId: [0-9 A-Z]+\n

をブランクで置換し、削除。

この段階で、すべて、

JournalTitle: MedAbbr: ISSN: IsoAbbr:


の4行の連続文字列となる(最後のISO レコードは項目としてないものもあるが、一応、あるものもあるので、残しておくことにする)。
これらを全て、1レコード(項目)をダブルコーテーションで囲み、カンマ記号で区切り、1行のデータに変換すれば、全体として、CSV形式のファイルになり、あらゆる表計算ソフトやDBソフトで読み込み可能な汎用性のあるファイルにすることが出来る。
まず、下にあるレコードから、置換作業を行う。


\nIsoAbbr:

を検索文字列とし、

","

を置換文字列にして一括置換。前の行と連結され、間が「","」で区切られる。

\nISSN:

を検索文字列とし、

","

を置換文字列にして一括置換。前の行と連結され、間が「","」で区切られる。

\nMedAbbr:

を検索文字列とし、

","

を置換文字列にして一括置換。前の行と連結され、間が「","」で区切られる。

^JournalTitle:

を検索文字列とし、

"

を置換文字列にして一括置換。前の行と連結され、行頭が「"」で区切られる。

$

を検索文字列とし、

"

を置換文字列にして一括置換。行末に「"」が入力される。

まだ、行頭に「[」が付いたジャーナルが残っており、このままだとソーティングした際に、エラー(というか、ノイズ)になるので、これを除去するが、正規表現では「[」はメタキャラなので、これを「[」そのものとするために、前に「\」記号を付す。「\」はメタキャラである記号を、記号そのものである、と見なすためのシーケンシャル記号である。

"\[

を検索文字列とし、

"

を置換文字列にして一括置換。翻訳ものなどの行頭の「[」が除去され、ソートする時にエラーがなくなる(後半の]やその前後の文字列は無視してよいであろう)。

一応、データだけだと、後で判らなくなる畏れもあるので、1行目に――、

"Journal Name","PubMed Abbreviation","ISSN","ISO Abbreviation"


という見出の項目名を記したデータを付けておく。

以上で、CSV形式のファイル化作業は終了である。14331行のデータファイルが出来る。
名前を付けて保存を選び、「jab1.csv」とでも付けてセーブする。





【2】表計算ソフトで整形/加工する。



これを、表計算ソフトで開く。ここではエクセルを使う。
エクセルで読み込んだら、全範囲指定し、A列をキーにしてソートを行う(範囲指定は、CTRL + A ではなく、一度、一番下までカーソル移動し、そこからマウスで冒頭までドラッグして範囲指定する。データ→並び替えで、キーをA列にして昇順でOKすればいい)。このデータの後半部分は、アルファベティカルになっていないので、ここで再ソートして、全部、ABC 順に並べ替える。

エクセルファイルに残すならば、名前を付けて保存にして、.xls の拡張子のファイルを複製する。その際には、タイトルを付けたり、見出行をセンタリングし、双方をボールド体にしたり加工してもよい。




【3】CSVファイルをHTML化する。



これだけでも使い回しのきくテキストファイル(CSV形式)であるが、ついでにHTML化してみる。これは、元データが PubMed という公共機関からダウンロードしてきたものだけに、どこかに公然とアップするわけにはいかないが、内輪で(イントラネットとかで)使う分には構わないであろう。ともあれ、テーブルタグを使ったHTML文書は、コツがあるので、練習問題としても恰好である。

なお、これだけ大きいファイルだと(つまり項目数が多いと)、通常のHTMLエディタでは、絶対に読み込めない。ふつうは、表計算ソフトで読み込んで、それを全範囲指定して、CTRL + C でコピーし、HTMLエディタを立ち上げて、新規ファイルに、それを CTRL + V でペーストするのだが、ソフトの(あるいはソフトが使用するメモリの)制約から、大きなファイルはペースト出来ないのである。だから、いくつかに分けて、地道に作っていくか、でなければ、エディタで一気に作るしかない(その方が早かったりするし、また、HTMLエディタは、お馬鹿で、よけいなタグを沢山つけてくれるので、あまり有りがたくない。手で書いた方が早いことが多い)。

さて――。

テーブル(表)は、テーブルタグと、それに付随するいくつかのタグの組み合わせで、表全体の規模やセルの属性などを決定される。

単純に云うと――、

<TABLE>

<TR><TD>

Journal Name

</TD><TD>

Abbreviation

</TD><TD>

ISSN

</TD></TR>

..............

</TABLE>



で囲まれたレコードが、1行の表(セルの1データ)となる。
上記では、見やすいように、各行間を空けてあるが、むろん、詰めて表記してもよい。

ここで注目されたいのは、テーブルを宣言するタグ

<TABLE> </TABLE>

はともかく、各セルを構成するタグは、セル内のデータを定型のタグで囲われている、という点である。ここに注目すれば、置換機能によって、簡単にテーブルタグを記述することが出来る。

<TR> ....... </TR>

とは、テーブルの行を定義するタグである。

見出しを指定する

<TH> </TH>

や、データセルを指定する

<TD> </TD>

の各タグによって構成される部分を、このタグで挟む。さらに外側をテーブル宣言タグの

<TABLE> </TABLE>

が挟むことでテーブル(表組み)は完成される。

要するに、1行のデータは

<TR> ....... </TR>

で挟まれ、入れ子細工のように、各セルは、

<TD> </TD>

タグによって挟まれるわけである。これを押さえておけば、上記のタグの意味が理解できるだろう(テーブルは、一見、ソースコードを見ても、複雑そうに見えるのだが、実際には、付属の属性などを除けば、そう大して複雑な構造をもつわけではない)。


では、具体的にどうするか、というと――。

元データの1行は、次のようになっている。

"Acta theriologica.","Acta Theriol (Warsz)","0001-7051","Acta Theriol."


テーブル宣言タグの

<TABLE>

などは、後から付ければよいので、まず、各セル(というか、データ)をHTML化してしまう。
レコードは4つに分かれる。第1レコードは、冒頭に「"」が付いており、最終レコード(第4レコード)は、やはり末尾に「"」が付いている。そして、各レコード間は、「","」記号で区切られている(実際には、各レコードが「"」=ダブルコーテーション記号で囲まれ、「,」=カンマ記号で区切られているのだが、見た目は、上述のようになっている)。

ではまず、データセルの末尾から置換していく。

"Acta Theriol."


という第4レコードである。レコード内容は、どうでもよい。というか、これを置換対象にするわけにはいかない。あくまでも、その属性や付された記号を置換対象にする。
行末を意味する正規表現は、「$」か、改行マークの「\n」である。さらに、各レコードを囲っている「"」が、恰好の置換対象の一意の文字列を表している(一意でないと、他のレコードまで、置換対象にしてしまうので、特に末尾と冒頭のタグを付さねばならない部分である、ここに、留意されたい)。

以下のように置換する。

"$

を検索文字列にし、

</TD></TR>

を置換文字列にして一括置換する。
むろん「正規」「すべて置換」にチェックを入れておく。

これで、各データ行の末尾に

</TD></TR>

が入力される。
次にセルとセルの間に相当するレコード間は、「","」で区切られている。これを、

</TD><TD>


に置き換えればいい。だから――。

","

を検索文字列にし、

</TD><TD>

を置換文字列にして一括置換する。

あとは、冒頭の第1レコードだけである。
これは、見出しタグとセルタグ(双方とも開始タグ)に置換すればよい。
行頭を意味する正規表現は「^」である。これを利用して第1レコードだけを特定出来る。

^"

を検索文字列にし、

<TR><TD>

を置換文字列にして一括置換する。

これで、全レコードがセルタグに囲まれて、HTML化された。
文書の前後に、テーブル宣言タグの

<TABLE>と</TABLE>

を付し、さらに、冒頭に、HTML宣言タグなどの、

<HTML>

<HEAD>

<TITLE></TITLE>

</HEAD>

<BODY>

<P>

........

</TABLE>

</BODY>

</HTML>


を入れてやる。
これで、一応、テーブルのHTML文書は完成だが、このままでは、なんとも味気ない。
いくつか属性を付して、見栄えをよくする。

<BODY>タグの属性として、背景色を指定できる(これらは最近では、スタイルシートに記述するように、との指示があるが、当分は、これで構わないし、やりやすい方法でもあるので、こちらで指定する)。以下のように記述する――。

<BODY bgcolor=lightyellow>


これで背景色が「明るい黄色」になる。バックグラウンド・カラーは、16進法で記述した方がよいのだが(基本色をのぞくと、対応していないブラウザもあるため)、たいていの色は、色名で書いても、IE やネスケで対応するので、とりあえず、こうしておく。16進法で記述すると、後で書き換えようとした時に、その色が何色だったのか、いちいち表を見なくては咄嗟には判らないので、色名で書いた方が判りやすいのである。

さらにテーブル宣言タグの属性として、幅などが指定できる。またレイアウトを指定すると、表示の際に、ブラウザが早く表示してくれるなどメリットがあるので、出来るだけ、属性指定をしておく。以下のように記述する――。

<TABLE BORDER=1 style=table-layput: auto width=800>


あと、タイトルを付け、それやテーブルの見出しなどにボールド体(太字)の指示を付ける。タイトルはフォントサイズを大きくして、色名を指定し、センタリングする。


<center><font color="blue" size=+2><b>PubMed ジャーナルタイトルと略号および ISSN</b></font></center> <br>

<TR><TD><b>
Journal Name</b></TD><TD><b>PubMed Abbreviation</b></TD><TD><b>ISSN</b></TD><TD><b>ISO Abbreviation</b></TD></TR>




【HTML=Webページ】



こうして出来たHTML文書の冒頭だけを示せば――


Journal NamePubMed AbbreviationISSNISO Abbreviation
1199 news. National Union of Hospital and Health Care Employees. District 1199.1199 News0012-6535 ---
20 century British history.20 Century Br Hist0955-2359 ---
21st century science & technology.21st Century Sci Technol0895-6820 ---
A Current bibliography on African affairs.Curr Bibliogr Afr Aff --- ---
A Journal of Church and State.J Church State0021-969X ---



と、このようになる。

だいたい、要領はご理解いただけた、と思う。
これを例題にして、いくつか練習すれば、そのままでは再利用が不可能な元データを、エディタ(と正規表現)を活用して、自在にCSV形式のファイルに、また、それをHTML化して、Webページにアップ可能な文書に変換することが出来るようになるだろう。

各位の参考になれば幸甚である。

なお、念のために再度、記しておくと、元データは、どこから取得したにせよ、そこに著作権があることを忘れてはならない。インターネット上には、さまざまなデータがあるが、一つひとつに、作成した人間(法人)の著作権が存在する。上記のようなデータの二次的改変は、著作権法違反か、それに抵触する畏れが強いので、取り扱いには、十分に留意されたい。