‘Perl’ タグのついている投稿

ChatGPT3.5でのスクリプティングを試してみた

2023/04/12

 話題の生成系AI、OpenAIのChatGPTでのスクリプトコード作成を遅ればせながら簡単に試してみました。2023年4月現在、無料で使えるのはChatGPT3.5ですのでそちらでのテストになります。なお、Bing Chatはまだ順番待ち状態なので素のChatGPTです。試した言語はAppleScriptとPerlになります。

AppleScript

 まずAppleScriptです。DTP作業で多用する処理を試しました。

・Photoshopの画像のカラーモードをグレースケールに

 結果:×
概要:「convert mode」ではなく「change mode to」にしないとエラーになる。

・Photoshopの画像の解像度を350dpiに

 結果:×
概要:「set resolution to」ではなく「resize image resolution」にしないとエラーになる。

・InDesignドキュメント内のJIS X 0213外の文字だけを赤くする

 結果:×
概要:文法がおかしいらしくスクリプトエディタでの保存自体ができない。JIS X 0213外の文字の判別式もこんなに短いわけがない。

Perl

 次にPerlのテストです。なお何も指定せずにコードを生成させたら内部文字列UTF-16のコードを出してきたので内部文字列UTF-8を指定して再生成しました。条件をちゃんと指定するのは大事ですね。また、動作チェック時に「use utf8;」の指定を書き足しています。

・与えられた文字列内にJIS X 0213外の文字が含まれているかどうかのチェック

 結果:×
概要:JIS X 0213はラテンアルファベットを含んでいるので(参考)、説明自体がおかしい。まあJIS規格は著作物扱いのはずなのでここですんなり出てきてしまったらむしろ問題かもしれない。

・与えられた文字列内にcp932の機種依存文字が含まれているかどうかのチェック

 結果:×
概要:判定ルーチン自体は正しいように見えるのだが、判定のリストがおかしいらしくよく問題になる丸数字やローマ数字が引っかからない。そこを書き換えられれば実用範囲か。

・与えられた文字列内にUnicodeのBMP(基本多言語面)外の文字が含まれているかどうかのチェック

 結果:○
概要:これは問題なかった。


 どうもChatGPT3.5の時点では、AppleScriptのような比較的マイナーな言語やJIS X 0213など日本のローカル規格の学習は足りていないのかもしれません。文法自体はパーツとしては使えそうに見えるのでその辺を割り切って使うなら許容範囲でしょうか。つまり元々コードが書ける人が時短目的で使うのなら有用かもしれないですね。いずれバージョンが進めば今回問題になったような「学習が足りない」ことが原因の間違いは減っていきそうですが、「AIにどういった問いを与えるのか」はおそらく相当先まで人間が考えるしかないので、そこをやれる人が効率化のために使うツールという位置づけになるのかなと思った次第です。

(2023.4.12)

mi内でタグ以外の箇所の半角英数字を一括全角置換したい

2018/04/05

 電書で縦書きの本を作ることが多いため、テキストエディタ「mi」内でXHTMLファイル内の半角英数字を全角に打ち替えなければならないことが時々あります。なんでそういうことになるのかと言えば、InDesignのデータ内では半角の英数字でも段落の設定次第で正立させて表示できるんですね。でもXHTMLとして書き出してしまうとそういう設定は飛んでしまうので半角英数字として横転してしまいます。なのでこれまでできるだけInDesign内で半角から全角に置換するようにしていましたが、やはり書き出してしまってから置換できてなかったのが判明して手で打ち替えるというケースがそれなりにあり、特に長めの単語ではめんどくさいし入力ミスが怖いなーと思っておりました。
 ということで普段使っているテキストエディタ「mi」内で気軽に置換できるようにしたので以下メモです。

やりたいこと

  1. miに書き出した段階ではXHTMLタグテキストの編集になるため、タグ部分は除外して置換処理をしたい
  2. テキスト全体ではなく該当部分を選んで置換処理をかけたい
  3. できるならショートカットで置換できるように設定したい

Perlでの置換処理の内容

 Perlで処理するための置換コード自体は以下。処理としてはテキストを<>で括られた文字列(要はXHTMLのタグ)を区切り文字として分割し、配列内各要素がタグかどうかを判定してタグではないものに対してのみ置換処理をかけています(なので使用者がタグの真ん中あたりから適当に範囲選択したりするとアレなことにはなるけどそれは無視)。ここいらのコードは市川せうぞーさんにヒントをいただきました。ありがとうございます。

ワンライナー化してAppleScriptに組み込む

これをワンライナー化してAppleScriptに組み込むことでmiでの現在の選択部分に対して置換をかけられるようになります。

 なお「on run」「end run」の行に関してはmi内のツールから実行するための記述なので、単体アプリとして保存して使うならなくてよいです。範囲選択した状態でアプリを実行すれば大丈夫。
miのモードにスクリプトを組み込む方法については詳述はしないのでmi公式ページなど見てください。実例としては以前に作ったこれの「その他」(Miscellaneous)フォルダに各種仕込んだりしてます。

キーボードショートカットで使えるようにしてさらに便利に

 で、これをキーボードショートカット一発で使えると本当に快適だなーと思って調べていたのですが、macOS設定メニュー内、キーボード項目のショートカット設定で行けるという情報を見つけました。素晴らしい! 何でも行けるじゃないですかこれなら。

 ということで早速設定。ついでにひらがな←→カタカナの変換も仕込みました。そちらもタグは除外して置換するようにしました。まあXHTMLのタグ内にカナとか漢字が混じってるとは思えないけど。

タグの部分以外が一括で置換された

タグの部分以外が一括で置換された

 他にも仕事ごとにいろいろ仕込んで使えそうだけどまあそこいらはおいおい。

(2018.4.5)

PandocのICML出力にでんでんマークダウン記法のルビを対応させる

2017/11/14

 Pandocというプロジェクトがあります(日本語解説はこちらを参照)。これはMarkDown記法などで書かれたドキュメントをHTMLやWord文書、PDFなどに変換して出力できるといったようなものですが、出力対応形式のひとつにICMLが入っています。これはAdobe InCopyの保存形式で、InDesignに配置して流し込むことができます(Pandocは一応EPUBにも変換できるようなのですが、まだEPUB2.0のようなのでまあ・・・)。
 なかなか興味深いのでちょっと調べてみたのですが、残念ながらルビには対応していません。まあMarkDown記法自体にルビの記法がないですし、ルビは(当たり前ですが)日本語版InDesignにしかない機能なので当然と言えば当然です。Pandocは国際プロジェクトなので仕方ないところでしょう。
 でもルビ使えたら便利そうだよねということで、でんでんマークダウンのルビタグ拡張記法に対応する置換処理をPerlで書いてみました。まあPandoc本体はHaskellで書かれているようなのですが、そんなもんは非専業プログラマとしては手が出ないので手を出しません。コードは以下。

ターミナルで

perl このコードのファイルパス.pl 変換するPacDocの出力したICMLファイルのパス.icml

のような感じで動作し、元ファイルを上書きします。結果はこの通り。
置換結果

PandocでMarkDown形式のファイルを.icmlにするのは

pandoc マークダウンファイルのパス.md -s -o 出力先パス.icml

のような感じ。
Pandoc自体のインストールは私はhomebrewでやりましたが、インストーラも存在するようです。

Pacdocを絡めたDTPフローの話はここここにあります。やはりみんないろいろ試されていますね。

テスト用に使ったマークダウンファイルもこちらに置いておきます。

(2017.11.15)

プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。