WEB

21 posts

PDF教材をHTMLに変換する 1

長い間プログラムを書いていなかったのですが、
児童用のPDF教材をWEB用に書き換える手伝い仕事で、
短いプログラムを書きました。

 

PDFをそのままWEB画面に貼り付けるのではなく、
内容はそのままに、新たにWEBのサイトを作るのです。

与えられた材料は、PDFファイルだけです。

主な作業は次のようなものです。

① PDFから文字と画像を取り出す。

② 画像と文字をHTMLファイルに書き込む。

③ 一部の漢字にはルビを振り、
PDFと同じようなレイアウトをし、
ボタンを押すと動画を表示するようにする。

 

そもそもPDFがあるということは、
恐らく、アドビ・イラストレータかInDesignを使っているのでしょうから、
電子データがあるのでしょう。
ということは、その電子データから直接画像なり、文章なりを抽出すれば、
全く簡単で正確な情報が得られるのに、どうしてこうなったのでしょうか。
著作権が問題だったのでしょうか。

 

まず①の仕事。
当然、手作業で書き写すわけにはいきません。

画像と文字を抽出するのに、
無料のソフト、確か画像抽出ではPDFTools、文字抽出にはABBYY FineReaderを使いました。

私は、古いAdobe Acrobatを持っていますので試したのですが、
これより上記のソフトの方がよく働いてくれました。

続きを読む

Python

約30年前(1980年代)、私が大型CADの開発を計画した時、パソコンといえばまだオモチャみたいなもので、ワープロ(一太郎)や表計算(multiplan)で事務文書を書く程度のものでしたので、これでは使い物にならず、開発環境としてはUNIX+Cを使う以外考えられませんでした。

ところが、1995年Windows95が出現してからは、マイクロソフトの影響が強力で、アプリケーション開発ではUNIXではなく、Windows PCで開発するのが主流になりました。

私も時流に乗り遅れまいと、.NETとくにVB.NETを勉強し、専らVB.NETのプログラムを沢山書いていました。Webの世界ではJavaやJavascriptやPhpが使われていましたが、私はお手伝いで使う程度でした。

Unixは元々米国ATTの研究者が研究用として作成したもので、徐々に評判を得たOS(基本ソフト)でしたが、ビジネスと結びつくと結構高額な商品で、簡単に使えなくなりました。ただしソースは公開していたので、1991年に当時フィンランドのヘルシンキ大学の学生であったリーナス・トーバルズがUnixを参考にUnix互換ソフトを開発、無償で公開しましたので、瞬く間に評判を得て、また沢山の人が開発に協力するようになって、Linuxとして大きく成長することになりました。

時代がWEBの時代になり、LinuxがWEBサーバーとして独占的に使われるようになると、マイクロソフトが強力に作り上げたPC中心のクローズした世界は仇となって、Linux上で動作するフリーソフトを中心にした技術が大変重要視されるようになってきました。

昔は傍流であったJavascriptやJavaやPhp、最近急激に人気がでてきたPython(パイソン)やRuby(ルビー)の技術者に多くの求人が集まっています。

私は、これまでPythonやRubyに関心がなかったし、勉強しようとも思っていなかったのですが、今評判の言語を全く知らないのもしゃくなので、少しPythonを勉強してみました。

Pythonを勉強してみて、まず思ったのは、「いい教科書がない。あるのかもしれないが、探せない。マイクロソフトではこんなことはあり得ないことだ」と、最初に面喰いました。

Pyhotnの入門書はありますが、これはプログラミングの初級者用で、プログラミング経験者にはあまりにもかったるいのです。また「いいかな」と思う本は、なぜか気取った書き方で、「言語仕様を普通に解説してよ」といいたくなります。ともかく数冊読んでみました。

「この言語は『極力余計なことをしない』を設計の中心においている」と感想を持ちました。この点では「Perlに似ているが、その方針はPerlより徹底している」と思いました。

例えば次のようなことです。

プログラムは通常上から下に実行していきますが、途中で頻繁に分岐やループします。

このとき「ブロック」が明確である必要があり、メインのブロック、分岐したAのブロックとBのブロック、分岐ブロックの処理が済んだときに帰ってくるメインブロックの位置が明確でなければいけません。

C言語の系列では{}でブロックを表現しますし、他の言語では、If 判断 then Aブロック else Bブロック endif のように、then、else、endifを使ってブロックを明確にします。

これは結構かったるいのですが、Pythonではインデント(行揃えをずらす)ですませます。

また、計算では数字や文字のグループ操作が沢山あり、これも面倒なのですが、この部分も効率よく処理します。

しかし、なぜこれほどまでPythonの人気があるのか、本当のところはよくわかりません。

一つ言えるのは、WEB関連で便利なモジュールやパッケージが沢山無料で出回っていること、多分、処理系も軽く比較的容易にWEBに組み込むことができるからだと思います。

さて、GoogleやYahooで探したい事項を検索すると、関連するサイトの一覧を表示しますが、どのようになっているのだろう、と思っていました。

「Pythonによる クローラー&スクレイピング入門」(加藤勝也 翔泳社、2017年)を読みました。

Wikipediaによると「クローラ(Crawler)とは、ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラム」で、スクレイピングとは情報を抽出することのようです。

この本にはたくさんのクローラーとスクレイピングの技法を紹介しています。

以前書きましたようにWEBページのソースには、通常ユーザに見えていない沢山のタグ(画面制御用のラベル)がついています。そしてこれらのプログラムはこれらのタグを辿って必要な情報を抽出・表示していきます。

「価格.com」や各種ランキングページは特定のページをクロールし、定期的に価格やランキングを取得しているのだと思います。

この技法を使って、YahooやGoogleを始め、沢山のWEBサイトがこのような処理をしているのでしょう。この分野の求人も結構沢山あるようです。

WEB プログラミング

最近、とりとめもなく色々なことをしていて、ブログのまとまった記事を書くことができません。

 

私はWebの仕事は、数件お手伝いでプログラムを書いた程度で、あまり詳しくありません。

私は、これまでもっぱらWindows用のデスクトップアプリケーションの開発をしてきて、「もう新たに他分野の勉強をすることもない」と意欲がありませんでしたが、WEBの仕事も面白いかもしれないと、少し勉強しています。

これまで私がWEBの仕事で使った言語はMicrosoftのASP.NET以外に、Perl、Java、Javascript、Phpで、これで打ち止めと思っていたのですが、Pythonが面白そうなので、今結構一生懸命勉強しています。

 

私たちが見るWebのページは、最終的には(ユーザのコンピュータで使われるのは)、Htmlという規約に則った文字データ(その他画像や音源へのリンク)でできています。

どんなものか知りたければ、ブラウザでどこかのページを表示しておいて、キーボードで[Ctrl + U](コントロールキーを押したまま、アルファベットのU)を押すと、このファイルのHtmlデータが表示されます。

ブラウザ(Microsoftのインタネット・エクスプローラーやGoogleのChrome)が、この文字情報を元に、通常私たちが見るきれいな画面に作り替えています。

先に書いた言語はブラウザを支援するために使われます。

JavaやPerlのプログラムの中身はHtmlファイルでは見えません。
通常、画面上のボタンをクリックすると、その指令はサーバーに送られて、JavaやPerlのプログラムが計算等の処理をして、その結果をブラウザに送ってくる仕組みになっています。

PhpはHtmlファイルの中にプログラムを書きます。たとえば、

<?php $a = 1;if ($a == 2): ?>
これは正しい。
<?php else: ?>
これは間違い。
<?php endif; ?>

で、<?php  ?>で囲まれた部分がPhpのプログラムで、この処理はサーバーで実行し、結果だけブラウザに送りますので、ユーザ(クライアント・ブラウザ)に届いたときには、この部分が何であったか分かりません。
上のプログラムは、ブラウザには「これは間違い。」という文章だけが返ってきて、従ってそのように表示されるだけです。その裏の処理はユーザは知る由もないのです。

再度言いますが、PhpのプログラマはHtmlファイル(拡張子はphp)にプログラムを書き込んでいくのですが、サーバがPhpを処理し、その部分はユーザには届きません。

 

JavascriptはWebでは最も多く使われている言語だといわれています。
この言語で書かれたプログラムはユーザ(ブラウザ)まで届き、ブラウザがこのプログラムを処理します。

上で[Ctrl + U]の押し下げると、Javascriptのプログラムは丸見えになります。

 

言語にはそれぞれ向き不向きがあります。
その言語が何に力をいれているかによって、関連するライブラリーがどれだけ沢山あるか濃淡があります。

セキュリティを十分考慮したプログラムを書くにはJavaが向いています。
その代りJavaを実行する環境が必要で、サーバーで設定しなければいけません。

私たちが簡単に使うことができるレンタルサーバーでは、あまり使うことができません。

恐らく、航空券の発行や金融機関では、専用のサーバーを構えて、Javaでプログラミングしていると思います。

 

簡便にちょっとした仕事をするには、JavascriptかPhpを使うと思います。
Perlは昔はよく使われていましたし、現在も使われているようですが、PythonやRubyに取って代わられるのではないかと思います。

 

言語は実行形式で大きく、コンパイラー型とインタープリター型に分けられます。プログラムは最終的には機械語に変換されますが、一度機械語に変換(コンパイル)しておいて、実務では常に機械語化されたプログラムを呼び出して使うタイプの言語をコンパイラー型言語といい、必要なときその都度元のプログラムを機械語に翻訳して使う形式の言語をインタープリター型言語といいます。

先の例では、Javaがコンパイラー型言語でその他はインタプリター型です。

コンパイラー型のプログラムは高スピードなので、纏まった処理をする場合にはこの形式の言語を使います。Java以外では、Fortran、C、C++、VB、C#、Pascal等沢山の言語がコンパイラー型です。

一方のインタプリター型の言語は、テスト(デバッグ)が容易にできますので、一寸した仕事、特別高速を要求されない仕事には向いています。

コンパイラー型とインタープリターの中間の言語があります。
プログラムコードを中間言語に一度翻訳しておいて、実際には中間言語から機械語にその都度翻訳するものです。
実はJavaがこの形式ですし、.NETといわれるマイクロソフトのVBやC#やC++がこれに属します。

 

ついでに、言語の分類で別の分け方があります。

宣言型と手続型です。

上に挙げた言語はすべて、処理の手続きをプログラマが書いていきます。

ところが、「こうしたい」と書いてやれば、処理してくれる言語があります。データベース用言語SQLとか昔AI研究で使われた推論用Prolog等です。

前者を手続型言語、後者を宣言型言語といいます。

 

さて、Pythonをどのように使ったらいいのかまだよくわからないのですが、Webの世界を徘徊し情報を集めるには適しているようなので、少し研究しています。

 

余談ですが、
数年前、初対面のあるソフト技術者が、現在ほとんど日本では使われていないDelphi(Pascal)という言語を使っていると聞いたので、軽い気持ちで、「デルファイを使っているのでね」と話の口火と切ったところ、「デルファイも」と「も」に力を入れて返答してきて、大変面喰ったことがあります。

彼は「あれもこれも知っているのだ」と言いたかったのでしょうが、ソフト技術者であれば最低3つ、普通に5つくらいの言語が使えなければ一人前とは言えません。

プロであれば、知っている言語の数を自慢するものではありません。

WordPress プラグインの日本語化 2

WordPressやテーマやプラグインは頻繁に更新されます。
HPを閲覧している人には関係ないのですが、問題は、開発者が接するテーマやプラグインのメニューや説明部分です。

WordPress自身は日本語化されていますので、新たな手間は必要ないのですが、テーマやプラグインの更新は、古いフォルダーをそっくり削除して、新しいソースに入れ替えますから、せっかく作った日本語ファイルは跡形もなくなり、メニューや説明部分は全て英語の記述になります。

更新があるたびに、Poeditでメッセージに日本語を付けていくのは、負担になり面倒です。

一つの解決策は、以前作成した[po]、[mo]ファイルを、元あった場所にアップすればいいのですが、プラグインが大きく変わった時は古い翻訳は役に立ちません。

最新のプラグインソースを基にPoeditを使って、英語のメッセージファイル(po)を自動で作成するか、プラグインによっては、訳がついていない英語のdefault.poというファイルがありますので、これに以前の翻訳を可能な限り自動で埋め込み、後はPoeditで訳を補足していくという方法を考え、そのためにプログラムを書くことにしました。

翻訳対象は最新の[po](default.po)で、埋め込むのは古い[ja.po]ファイルです。

[ja.po]ファイルは実は次のようになっています。

#: core/class-fire-prevdem.php:285 core/init-base.php:267
msgid “”
“Many layout and design options are available from the WordPress customizer ”
“screen : see your changes live !”
msgstr “”
“様々なレイアウト,デザインオプションがWordPressのカスタマイズ画面にありま”
“す : その場で変更を確認!”

[default.po]には[msgstr “”]だけで、翻訳(日本語訳、上の例で[“様々なレイアウト,…])がありません。
[default.po]の[msgid] に対応する部分を[ja.po]から探し出して、[ja.po]の[msgstr]部分を [default.po](実際には出力用に新たな別ファイル)の[msgstr]に、埋めていくことになります。

新たな[default.po]を自動で翻訳しきれなかった部分は、Poeditを使って翻訳していきます。

VB.NETでプログラミングしました。
多少使い勝手をよくして500行弱のプログラムです。

取り敢えずこれで良しとします。

WordPress プラグインの日本語化

最近私はホームページを作るときは、殆どWordpressを使っています。

WordPressそのものは日本語化されていて、
ブログ画面も裏方の管理画面も日本語を標準で使えるのですが、
デザインを担当するテーマや追加機能のプラグインは大半が英語です。

私は多少は英語でもいいのですが、
画面に英語がでるとそれだけで読む気がしなくなります。

WordPressはPHPで書かれていて、
ユーザに何かの文章を示す部分では、下のような仕組みを使っているようです。

$message = ‘<p class=”message”>’ . __(‘You have logged in successfully.’) . ‘</p>’; $message = ‘<p class=”message”>’ . __(‘You have logged in successfully.’) . ‘</p>’;

ここで重要なのは「__(」の部分です。

WordPressでは、ここの部分を各言語に置き換える仕組みがあります。
インターネットでは、日本語を使う宣言には、
「define (‘WPLANG’, ‘ja’);」という記述がある筈だと書いてありましたが、
私は確認できませんでした。
ともかくどこかに[ja](日本語)ファイルを使うという宣言があると思います。

さて、__(‘You have logged in successfully.’)に対応する、日本語を作成しなければいけません。
Poeditというソフトがあります。
確か数千円だったと思いますが、これが思いのほか有用です。

まず、日本語化したいテーマやプラグインのソースをダウンロードしておきます。

次にPoeditを起動して、このプラグインのフォルダーを指定すると、
翻訳対象部分をすべて抽出して、表を作って表示してくれます。
表の左欄に英語を、右に日本語を表示するようになっています。

翻訳したい言語を選択(日本語)して、「事前翻訳」ボタンをクリックすると、
左蘭の英語に対する日本語訳を右欄に表示してくれます。
ただし、不十分な翻訳ですから、原則すべての翻訳を確認するように求められます。

一行一行見ていきますが、このこき幾つかの翻訳候補が表示されますので、
そのどれかでよければ、その翻訳を選択しますし、
どれもダメなら自分で翻訳を入力します。

大きなテーマやプラグインだと数百行文章がありますが、
やるしかありません。

ともかくやり遂げましょう。

出来上がりは、[po]とそれをコンパイルした[mo]ファイルが作成されます。
できたら、自分のサイトの所定の場所に二つのファイルをアップします。
(他言語ファイルが沢山アップされています)

これでWordpressの管理画面を開いたときに、
このプラグインは日本語化されています。

やれやれ。

 

ところが話はこれで終わりません。