powershellで書籍索引を名寄せする


背景

初投稿です。書籍編集者として働いています。
ゲラの校正などが進み、本づくりもいよいよ大詰めという段階で本文とは別に厄介な仕事になるのが索引の作成です。特に厄介なのが 名寄せ で、これは下記のように Microsoft Excel などに拾った用語とノンブルを「項目-ノンブル」の一対一対応の関係に整形する作業です。

↓(面倒!)

いちご  1,5
バナナ  8,9
みかん  10
りんご  1,18

正規表現の文字列置換で上記作業を行う編集部秘伝の紙製マニュアルもあるのですが、もう少し近代的な方法でこの作業を効率化できないかと編集部の PC に入っている powershell でコマンドレットを作成してみました(実行ポリシーは変更済です)。

コード

function Format-Nayose {
    <#
        .SYNOPSIS
        索引を名寄せする
        .PARAMETER delimiter
        項目とノンブルの区切り文字
        .EXAMPLE
        Get-Clipboard | Format-Nayose
        Get-Clipboard | Format-Nayose -delimiter "," # カンマ区切りからコピーした場合
        $hoge -split "[\r\n]+" | Format-Nayose
    #>
    param (
        [string]$delimiter = "`t"
    )
    $object = $input | ConvertFrom-Csv -Delimiter $delimiter -Header "item", "nombre"
    $object | Group-Object -Property "item" | ForEach-Object {
        Write-Output ("{0}  {1}" -f $_.Name, ($_.Group.nombre -join ","))
    }
}

使い方

# Microsoft Excel からコピーして作業する場合
PS > Get-Clipboard -OutVariable cb
いちご   1
いちご   5
バナナ   8
バナナ   9
みかん   10
りんご   1
りんご   18

PS > $cb | Format-Nayose
いちご  1,5
バナナ  8,9
みかん  10
りんご  1,18

# テキストファイルを読み込んで処理する場合
PS > cat .\hoge.txt | Format-Nayose
……

# カンマ区切りの場合
PS > cat .\fuga.csv | Format-Nayose -delimiter ","
……

基本的に一度コンソール上で変数内容を確認してから作業していますので、パイプライン経由での使用のみを想定。自動変数の $input でパイプライン経由で入力を取得して Group-Object で処理整形しています。

powershell は Windows であれば標準装備ですので非エンジニアにもオススメできそうです(ただしダブルクリック・ドラッグドロップで実行できる .vbs.bat に比べるとハードル高)。Officeと一太郎と大量の紙ゲラに埋もれた環境でも、デジタルでの効率化余地は大いにありそうです。