• 利用案内
  • サービス概要
  • 東京本館
  • 関西館
  • 国際子ども図書館
  • アクセス
  • 複写サービス
  • 登録利用者制度
  • オンラインサービス
  • オンラインサービス一覧
  • 国会関連情報
  • 蔵書検索
  • 電子図書館
  • 調べ方案内
  • 電子展示会

コラム:書誌データ利活用(5) ―テキストエディタを使ったNDL-OPACダウンロードファイルの加工

NDL書誌情報ニュースレター

NDL書誌情報ニュースレター2014年4号(通号31号)

今回のコラムでは、NDL-OPACからダウンロードしたファイルを、テキストエディタで加工する方法について、いくつかご紹介します。

【はじめに】

NDL-OPACからダウンロードしたファイルは、すべてテキスト形式です。テキストエディタで開いて編集等を行うことができます。テキストエディタにはさまざまな種類があります。今回のコラムでは、Meryというテキストエディタ[1]を例に、以下の三つのケースでの加工方法をご紹介します。

  1. 記号区切り形式($区切り):途中で改行されてしまうレコードへの対処
  2. 標準形式:途中で改行されてしまうデータ項目(タグ)への対処
  3. ALEPHシーケンシャル形式(ASF):UTF-8からSHIFT-JISへの文字コード変換

1. 記号区切り形式($区切り):途中で改行されてしまうレコードへの対処

記号区切り形式のファイルをダウンロードしたときに、1レコードが途中で改行されているケースに遭遇したことはないでしょうか。これは、1レコード中の文字数が多いと、一定の長さ(決まったバイト数)で改行されてしまうからです。これでは、Excelにうまく取り込むことができません。

この問題を解決するために、正規表現[2]を用いた文字列の置換を行います。NDL-OPACからダウンロードしたファイルをMeryで開き、検索メニューから置換を選んでください(図1参照)。


図1 置換画面

加工方法

  • 図1-1をご覧ください。通常、レコードNo.の下に1レコードが1行で表示されますが、No.56とNo.59のレコードは2行にわたって記載されており、途中で改行されていることがわかります。また、Excelに取り込む場合、レコードNo.の行も、行の先頭にある半角スペース5文字分も、必要ありません。


    図1-1 ダウンロードファイル(記号区切り形式)
    (表示メニューから「折り返さない」を選択した画面。以下の図も同様。)

  • レコードNo.の行から3行分をまとめて置換します(図1-1の囲み部分を参照)。以下の表のとおり置換画面に入力し、「すべて置換(A)」ボタンを押してください。図1-2のようになります。入力する文字列の意味は、コラムの最後で説明します[3]

    検索する文字列(I): ^\s\s\s\s\sレコード.+\n\s\s\s\s\s([0-9]{9}.+)\n *(.*)\n
    置換後の文字列(P): $1$2\n
    チェックボックス 「正規表現を使用する(X)」にチェック


    図1-2 置換処理終了

  • 図1-2の状態でもExcelに取り込むことは可能ですが、空白行が必要ないので削除します。以下の表のとおり置換すると、図1-3のように空白行がなくなります。これならExcelに取り込んでからの手間が減ります。

    検索する文字列(I): ^\n
    置換後の文字列(P): (何も入力しない)
    チェックボックス 「正規表現を使用する(X)」にチェック


    図1-3 不要な空白行の削除(テキストエディタでの加工完了)

2. 標準形式:途中で改行されてしまうデータ項目(タグ)への対処

標準形式のファイルでは、1つの項目の中の文字数が多い場合に、図2の注記のように途中で改行されることがあります。これも正規表現を使った文字列の置換で対処できます。


図2 ダウンロードファイル(標準形式)

図2の27行目、28行目の先頭にある半角スペース26文字分と前行の改行を削除すると、図2-1のように途中で改行されなくなります。

検索する文字列(I): \n\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s
置換後の文字列(P): (何も入力しない)
チェックボックス 「正規表現を使用する(X)」にチェック


図2-1 データ項目途中の改行削除

3. ALEPHシーケンシャル形式(ASF):UTF-8からSHIFT-JISへの文字コード変換

ASF形式は、UTF-8の文字コードでしかダウンロードできません。SHIFT-JISへの文字コード変換も、Unicodeに対応するテキストエディタでできます。ASF形式のファイルを開いたときに文字化けするテキストエディタは、おそらくUnicodeに対応していないものです。

今回使用しているMeryでは、名前を付けて保存するとき(図3参照)に、エンコードの選択項目で「日本語(シフトJIS)」を選択して保存すれば、文字コードが変換されますので、とても簡単です。


図3 文字コードの変換

【おわりに】

テキストエディタを使うと、今回ご紹介した加工方法のほかにも、さまざまな加工を行うことができます。テキストエディタをうまく使って、全国書誌データを便利にご活用いただければと思います。

また、今後のこのコラムで取り上げてほしいテーマ・内容などがありましたら、メール(bib-newsアットマークエヌディーエルピリオドジーオーピリオドジェーピー)でお寄せください。

(収集・書誌調整課 書誌サービス係)

[1] Unicode、サロゲートペアなどに対応し、正規表現で検索・置換が可能なテキストエディタ。
http://www.haijin-boys.com/wiki/,(参照2014-11-10).
本稿でご紹介する三つのケースのうち、1と2については、正規表現およびNDL-OPACからのダウンロードの際に指定した文字コード(UnicodeまたはSHIFT-JIS)に対応しているテキストエディタであれば、加工できます。3については、Unicodeに対応していれば加工できます。

[2] 端的に言えば、いくつかの文字列を一つの形式で表現するための表現方法。たとえば、「あいうえお」と「かきくけこ」は「.+」(半角ピリオドと半角プラス)で、電話番号「03-3581-2331」は「[0-9\-]+」で表現できます。正規表現の意味は、[3]をご覧ください。

[3] 正規表現の意味は、次のとおりです。また、図1-2で使用した文字列を説明します。

正規表現 説明
^ 行の先頭。半角アクサンで表現。
\s 半角スペース。半角円記号と小文字のsで表現。
\n 改行。半角円と小文字のnで表現。
. 任意の文字。半角ピリオドで表現。
.+ 1つ以上の任意の文字の連続。半角ピリオドと半角プラスで表現。
.* ゼロまたは1つ以上の任意の文字の連続。半角ピリオドと半角星印(半角アスタリスク)で表現。
[0-9]{9} 半角数字が9文字分。半角数字は、0-9を半角大カッコで囲んで表現。個数は、半角中カッコで数字を囲んで表現。
[0-9]+ 半角数字の連続。
$1、$2 変数。
(●) 半角小かっこで囲まれた部分●は、変数に代入できます。変数は、$1、$2、・・・と表現。
図1-2で使用した文字列の意味
^\s\s\s\s\sレコード.+\n\s\s\s\s\s([0-9]{9}.+)\n *(.*)\n \nが三つあるので、3行分を表現。
1行目:^\s\s\s\s\sレコード.+\n
行の冒頭に半角スペースが5個あり、次に「レコード」の文字列があって、その後に何かの文字列があって、最後に改行。
2行目:\s\s\s\s\s([0-9]{9}.+)\n
半角スペースが5個あり、半角数字が9個で、次に何かの文字列があって、最後に改行。
3行目: *(.*)\n
ここの部分は、途中改行された行と空白行の両方にヒットするような文字列になっています。そのため、先頭の半角スペース(見づらいですが、*の前に半角スペースがあります)を\sで表現せず、そのまま表現しています。
$1$2\n 置換後の文字列で、変数($1、$2)を含みます。置換前の文字列(検索する文字列)で表現すると以下のとおり。
([0-9]{9}.+)(.*)\n

このページの先頭へ

NDL書誌情報ニュースレター(年4回刊)

ISSN 1882-0468/ISSN-L 1882-0468
2014年4号(通号31号) 2014年12月25日発行

編集・発行 国立国会図書館収集書誌部

〒100-8924 東京都千代田区永田町1-10-1

メールアドレス:bib-newsアットマークエヌディーエルピリオドジーオーピリオドジェーピー(ニュースレター編集担当)