小ネタ:pdftotextで文字データを抽出
元データがPDFで、圏点(傍点)やダッシュをPDFから検出する必要にせまられた。
目視確認などありえないんで、テキストデータとして取り出して検索しよう、というのが今回のエントリ…というかエントリにするまでもない内容なんだけど、たぶんそのうち忘れるんで、メモ。
PDFから文字情報だけをひっぱりだすのに定番の「pdftotext」というツールを使う。
perlだけでもできそうなんだけど(PDF::API2あたり)ちょっと時間も押してるんで、外部ツールを間に挟むことにした。
まずは肝腎のpdftotextのインストール。これがpoppler-utilsというパッケージだなんて検索しないとわからなかった(pdftotextというパッケージがあるもんだと思ってた)
以下のコマンドラインでインストール
sudo apt-get install poppler-utils
unix系のツールの例に漏れず、これもいろんなオプションが用意されてるけど、今回必要なのは文字情報だけ。レイアウトデザイン情報やなんかは不要。
rawオプションをつけて利用する。
たとえば「kappa.pdf」の文字情報を抜き出すのは
pdftotext -raw kappa.pdf
こうすると「kappa.txt」に文字情報を吐き出す。ただ、これだとひと文字ずつだあーっと出力されるので、ここからがテキストデータを扱わせたら最強のperlの出番。
pdftotextの出力には改ページがつくので、そこで改行すれば「それっぽい段落」ごとに見えるひとに優しいテキストファイルとなる。
open(P, '-|', 'pdftotext -raw kappa.pdf - ' ) || die;
binmode STDOUT => ":utf8";
open(OUT, '>' , 'kappa.txt') || die;
binmode OUT => ":utf8";
while(<P>){
my $line = Encode::decode('utf8', $_);
$line =~ s!\r?\n!!;
$line =~ s!\x{C}!\n!;
print OUT $line;
}
close(OUT);
close(P);
特筆すべきようなスクリプトじゃないんだけど。
perlは外部コマンドの「標準出力」をパイプで受け取って加工整形できる。
open(P, '-|', 'pdftotext -raw kappa.pdf - ' )
openの
・第2引数で、標準出力を受け取りますよ、という指定
・第3引数はpdftotextの結果を標準出力に出すからね、という指定
これだけでそれっぽい段落にわけたテキストファイルを作ってくれる。
そうしたら、あとは出力されたテキストファイルからダッシュや圏点(傍点)っぽいものをperlで検知するだけ。これはワードで作ったPDFで「、」が圏点となっている。inDesignで作られたデータだと「0」(ゴマ)「4」(ドット)となる。
直接触ってもいいんだけど、一度テキストファイルに吐き出したほうがなにかわからないことが起こった時に便利なので、こういう仕様、段取り。
このスクリプトのおかげで抜け漏れは捕捉できるんでずいぶんラクになった。
以前、目視確認とか無駄なだけだし、んなもんツール作ってやればいいじゃん、とか言ったら、そしたら仕事がなくなる、目視確認手作業修正は必須だ、と言われて心底、呆れた。
カネをもらった上で、人間の作業=ミスが入り込む原因になる工程を入れるって、いろいろ悪質すぎる。
ITといってもピンキリで、こんなのが入り込んでるから要注意。
そもそも、その程度の仕事なんて、なくなっても問題ないし、特に困らない。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
StableDiffusionの呪文?
画像生成AIが面白くて、google colabでお試し中。
AIからどんな画像を取り出すのかは、AIに投げる言葉次第。呪文と言われるのもわかる。
↓こちらが丁寧で詳しいのでオススメ
魔術そして理解するお絵描きAI講座
https://note.com/fladdict/n/n0f0be20e3e23
ていうか、これは必読。
具体的な呪文の例はこちら
https://lexica.art/
検索窓にpixivとかplaystation5とか入れるとわかりやすい。
で、以下はド素人が多分に間違った知見を元に書いてるヨタ。
AIに投げる呪文はプロンプトと言われていてその構成は以下が最適
<全体のフォーマット><主題><主題の補足><作者><全体の補足><フレーバー>
「美術館のサイトなんかでどんなキャプションがついてそうか?」を考えて呪文を組み立てると良いらしい、AIに意図が伝わりやすいとのこと。
Buddha walk on the surface of the moon
呪文はこれだけ。前記した構成でいうと「仏陀が月の表面を歩く」主題だけ。これはこれでAIまかせで面白い。
ただ、ほかのひとの上げている画像と見比べてみて、画質というか描画が全然ダメだなあ、と。ほかのひとの呪文を覗いてあれこれつけ足してみたら安定した、かな。
High quality concept art,
Buddha walking on the surface of the moon,
high contrast,
sharp focus,
art station trending,
highly detailed,
digital painting,
digital art,
4k
「主題」は最初と同じ
Buddha walk on the surface of the moon
で、それ以外にいろいろ見様見真似、それこそ呪文状態で付け足した。
「全体のフォーマット」に High quality concept art
を指定。
コンセプトアートはいい感じの絵ということ、でいいかな。ここは他に油絵とか水彩画とかを指定するといいらしい。
「主題の補足」にコントラストが強くてピントぴったりという補足説明。
「作者」は「art stationというゲーム紹介サイトのトレンドにありそうな」ということにした。ほかにpixiv rankinだと「ピクシブでランクインしてそうな」という使い方。ここにゴッホとかレンブラント、京都アニメーションやジブリなんかも。
「フレーバー」として細部まで細かい、デジタルで描かれている、画質4K。
このフレーバーに、カメラのレンズや開放値、シャッタースピードなんかを入れるのも効果的というのが、ネットで学習するAIならでは、というやつだろう。
美術などを学問的系統的に学ぶのではなくて、ECサイトのカメラ販売ページなんかにある作例を脈絡なく取り込んでるのでこちらの側からアクセスも面白いということになった、んだろなあ。
たぶん、以下からフレーバーに「playstation5」とか「unreal engine」とかつけた。ゲーム画面を指定したらそれっぽいものが出るようになった。安定した、かな。
月の上ばかりじゃなく、サイバーパンクの街にしてみたり
日本の寺にしてみたり
スチームパンクにしてみたり
坊主が歩いてばかりなので跪いてお祈りするようにしてみたり
坊主ばかりじゃなくて女の子にしてみたり
スチームパンクな街に秋葉原を指定してみたり
こりゃキリがなくて面白すぎる。
意図した絵を作るために呪文の精度を上げれば仕事に使えるし、意図しない絵が出てきたらそれを元にストーリーを作る・大喜利を始めるのも面白いし。
ちなみに、権利的には商利用も自由。本、同人誌の表紙や挿絵が欲しいけど、絵が描けないとか頼めるひとを探すのが難しいというような場合、この画像生成AIの出番。
ただし、実在の人物なんかを呪文のタネに仕込んだ場合、肖像権にブチ当たって弁護士と内容証明が飛んでくる可能性が十分あるので、そこだけ注意。
まだまだ遊べるなあ。
[2022/08/30 10:24:41]追記
今日時点で。呪文のテンプレは以下
High quality concept art,
「ここに具体的な描写内容を英語で記述」
rim light,
wide angle,
sharp focus,
high contrast,
highly detailed,
digital art illustration,
art station trending,
playstation5,
4K
なんとなく、だけど。StableDiffusionは縦長の構図は苦手かなあ。
あとは出てきた絵をネタにしたエントリを頑張る
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
cloudreadyのlinux環境その後
chromebook化したノーパソを快適に使ってたんだけど、つい一昨日cloudreadyのアップデートをしたらlinux開発環境のディスク容量が足りない、とか言われてしまうの巻。
確か10Gぐらいは確保しておいたはずで、データについてはSDカードを使ってるので足りないわけはない…はず。再起動しても同じ警告が出るし、mate-terminalというターミナルも動作が怪しく、明らかに重たくなっていて、反応が遅い。
とはいえ、cloudreadyでディスク容量割り当ての変更はできないっぽくて(探しても見当たらなかった)ので、linux開発環境を削除してもう一度設定のやり直しすることにした。リセットボタンやね。
linux開発環境削除というと何やら大げさだけど、データはすべてSDカードだし、ひとつのアプリを削除するのと同じような気楽さだ…のはずだった。
とりあえず今度はlinux環境に13G確保。もともとこのASUSのVivobookはストレージが32Gしかないんで、あまり多く確保するのもちょっと心配で、そお〜っと3Gだけ増やしてみた。根拠はない、なんとなく。
そしてまたlinux環境の設定、各種アプリ、ソフトのインストールしてみたら、バージョンの違いなのかハマってしまったのでメモ。
その1。
linux環境をONにしてターミナルを立ち上げたら、まず最初に
sudo apt update
sudo apt list --upgradable
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove
この5点セットでlinux環境を最新のバージョンにする必要がある。
これを忘れたせいで、apt で get しようとしたら404 Not Foundのエラーが多発して使いたいソフトがインストールできなくて焦った。
その2。
javaがaptでうまく入らず、よくわからなかったんで、
https://jdk.java.net/archive/
から最新っぽいjdk-16(Linux/x64)をダウンロードして適当なところで解凍(tar xvfz)してみたら、それだけでオッケーぽい(結果オーライ)
というか電子書籍、epubファイルの検証のためだけに使うので、javaコマンドだけあればいい。
その3。
ターミナルの日本語環境。
これまではmate-terminalを使っていて、日本語の表示も入力もやってたんだけど、こいつがうまくインストールできずじまい。標準のターミナルは日本語が使えないのが致命的。
というのも、電子書籍制作の場合、納品時にディレクトリ名に本のタイトルや著者名などを使うことが多いので、ターミナルでの日本語の扱いは必須…書籍コードがあるんだからそっちにしてくれると問題は起こらないんだけど。
てことでここでも検索しまくり。
sudo apt install task-japanese locales-all
↑これで基本的な日本語環境が整うっぽいんでびっくり。改めて感謝。
環境変数を設定して
LANG=ja_JP.UTF-8
LANGUAGE=ja_JP:ja
googleのlinux版日本語入力をインストールして
sudo apt install fcitx-mozc
設定ファイルに
sudo vim /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf
以下の環境変数を追記
Environment="GTK_IM_MODULE=fcitx"
Environment="QT_IM_MODULE=fcitx"
Environment="XMODIFIERS=@im=fcitx"
Environment="GDK_BACKEND=x11"
そしたらば、標準のターミナルで日本語の表示ができるようになる。しかし、入力については無理。変換で行やカーソル位置が乱れて使いものにならない。
…とか思って検索しまくってたら、標準のターミナルで日本語入力をする方法が紹介されていた。めちゃくちゃ感謝!
https://qiita.com/senbeiman/items/6afe824162df4b38b0cc
uim-fep と uim-mozc をaptでインストール
設定ファイル .uimに以下を設定したら当たり前の顔をしてコマンドラインで日本語が使えるようになった。
(define default-im-name 'mozc)
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> "))
また、ターミナルとは別に、エディタのvimでは日本語入力にSKKを使ってるのでその設定も必要。
HOMEに .vim/plugin というディレクトリを作成。そこに skk.vimをコピー
https://github.com/tyru/skk.vim/blob/master/doc/skk.jax
これでようやく仕事、作業環境が復旧。
まだ、エディタの設定が残ってるけど、とりあえず今回はここまで…お気づきだろうか。
ドットファイルと呼ばれる各種設定ファイルはlinux開発環境のホームディレクトリにあることがほとんど。つまり、linux開発環境を削除してしまう前にドットファイルやディレクトリのバックアップが必要だった、ということを忘れてしまっていた…とほほ。
とはいえ、今回、改めて久しぶりにchromebookのlinux環境について調べ物ができたのは収穫だったかな。設定ファイルさえあれば、いつでも今まで通りの作業環境に復帰復旧できるポータビリティとでもいう、unix系の良いとこ(前向きや)
※環境設定まわりのバックアップは忘れずに!
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
CotEditorのスクリプトメニュー
xyzzyに身体が馴染み過ぎていて、エディタが必要な作業の場合は普段使いのmacからWINDOWSに移動している。
macでは最初Emacsを使ってたんだけど、なんか大袈裟だし日本語の表示が乱れたりしたこともあったので(mac統合環境の上でEmacs統合環境を立ち上げる、てな感じだしなあ)、miとCotEditorをインストールしてみて、とりあえず最新版が新しい方、CotEditorを使うことにした。
とはいえ、どうせエディタ作業はWINDOWSでxyzzyでやるし、てきとーでいいか、と放置状態。
先日、xyzzyについての雑記で、編集中のバッファを外部コマンドに渡して処理結果を受けとり編集中のバッファを書きかえる、とか、クリップボードにコピーする、なんてことを書いていて(https://t2aki.doncha.net/?id=1440225861)、CotEditorのスクリプトメニューを思い出した。
本職のプログラマはどんな処理系も使うけど、わたしはド素人なもんで、perlが使えると本当に助かる。ていうか、perl以外はよくわからんし。
CotEditorのスクリプトを使えば外部のコマンドと標準入出力でやりとりできる。シェルスクリプトやperl、php、rubyなんかがCotEditorから使えるのだ。
てことで、調べてみた…って、CotEditorのScriptMenuフォルダにマニュアルがあった。
やるべき設定としては以下の2つ。
【その1】
スクリプトの置き場所とファイル名。
~/Library/Application Support/CotEditor/ScriptMenu/
ファイル名でキーボードショートカットなどを使える。
*. キーボードショートカットは、もう一つの拡張子を追加すれば実装できます。
例 2.
ファイル名 = "Insert String.@e.scpt"
メニュータイトル = "Insert String" + Command + E
スクリプトはchmodで755にしておく必要がある。
【その2】
スクリプトのCotEditor用の書きかた。
冒頭1行目はお約束の「#!/usr/bin/perl」で、それに続けて。
# %%%{CotEditorXInput=xxxx}%%%
# %%%{CotEditorXOutput=xxxx}%%%
この2行。
Input(CotEditorからの入力)のxxxxには
「Selection(選択部分)」
「AllText(ドキュメント全部)」
「None(なし)」
output(スクリプトの出力先)のxxxxには
「ReplaceSelection(選択部分を書きかえる)」
「ReplaceAllText(ドキュメント全部を書きかえる)」
「InsertAfterSelection(選択範囲の後ろに挿入)」
「AppendToAllText(ドキュメントの末尾に追加)」
「Pasteboard(クリップボードにコピー)」
「Discard(出力を使わない)」
設定を把握したら。
まず試しに、編集中のテキスト1行ずつHTMLのPタグをつけてみる。
↑こんなスクリプトを「test.@p.pl」という名前で
「~/Library/Application Support/CotEditor/ScriptMenu/ 」に保存。
スクリプトメニューに「test」というメニューが現われ、キーボードショートカットが「コマンドキー+p」に割り当てられている。
テキトーな文章に
pタグをつける
こんなことは、エディタの置換だけでできるのでわざわざ外部スクリプトにする必要はない。
これの美味しいところは、このスクリプト「test.@p.pl」をその場で書き換えても、エディタの再起動などする必要なく、反映してくれるところ。使い捨てのテキトーなスクリプトのブラックボックスとして利用できる。
これができるなら、macでもエディタをちゃんと使おう。
ちなみに今回ちょっとハマったところがあって。
macのファインダーに「ライブラリ」フォルダなんてないよ!どうすんだよ!CotEditorでスクリプトを書いて保存しようとしたら「ライブラリ」フォルダが出てこなくてビックリだ。いちいちデスクトップなんかに保存してコマンドラインでコピーするわけ?
検索したらば「ファインダー」でホーム画面を開いて「表示」→「表示オプションを表示」→「"ライブラリ"フォルダを表示」にチェック。
macは隠し事が多い、いけすかない野郎だなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ぷち物欲の波か
どうもここんとこプチ物欲の波でもきてんのか。vivitarを買ってキーボードを買って、今度はフィルムをスキャンできるスキャナーが欲しい。てことで調べてみた。専用のフィルムスキャナーとなると安いものでも5万円弱。その上となると10万円超。んなもん手が出ない、というか買ったところで元が取れん。フラットタイプのスキャナーで透過原稿を扱える=フィルムもスキャンできるというやつがどうやら現実的。9月に出るエプソンのスキャナーはなんと驚きのメーカー希望小売価格17800円。なんか狙い撃ちされてるような。
いまどきは同時プリントでいくらなので、現像だけでいいからといってコストは変わらない。でも、パソコンに取り込むことを考えると、プリントをスキャンするのとフィルムをスキャンするのでは質が格段に違う。webで写真を見せびらかすのも簡単だ。
プラモデルカメラが壊れたのでこれもまた買わきゃいけないし。プチ物欲がちろちろきてんなあ。
ここんとこ雨続きで、おもちゃカメラには厳しい(暗い)天気だけど、晴れたらぱしゃぱしゃ撮りに表にいきたいなあ。近場だと水元公園はまさにvivitarのような広角向け。メタセコイア並木が続くので絵になるに違いない。ついでにひさしぶりに大人の科学の付録のピンホールカメラも引っ張り出すか。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
プールに慣れてきたかも
うーむ。日曜のプールはマナーの悪いのが多いなあ…といいつつ、ここんとこ割と普通に泳げるようになってきた自分レベルアップだ。
いや、相方にひっぱられてン年ぶりにプールに行った時は、こんなハズでわっ!とのろのろとしか進まず息ももたない自分にパニックで、1時間も泳がないで出たというのに全身ガクガクで吐き気すら催すテイタラク。
それがここんとこゆっくりではあるけどなんとなく泳げてるのだ。となると、水の中でほわほわ浮いてる感覚も楽しくなってくる。
うううむ。駅前のフィットネスクラブに行ってみたいような気がするし、週明けだし、いろいろがんばらねばいけません。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」