プログラム

125 posts

HTMLでのルビ付けプログラム

ブログの更新が滞っていて、「PDF教材をHTMLに変換する」という記事を書いてから、もう一年近くになります。

その時はプログラムの内容を殆ど何も書かなかったので、
今回はPythonで書いたプログラムの内容と、
それを機に、同じことをTypescript(Javascript)、GO、C++で書いてみたので、これらの言語の比較・感想を書いてみます。

最初に、ルビ付けプログラムの基本的考え方をみます。

簡単にいえば、辞書を用意しておいて、文書の中で当該漢字が出てくれば、その漢字をルビづけのHTML文字列で置き換えればいいのです。

文字列がコンピュータの中でどのように扱われているかは結構複雑で難しい問題ですが、
現在のプログラミング言語では、低レベルの仕組みを熟知していなくても、プログラミングできるようになっています。

文書の中で特定の文字を探し出し、他の文字と置換する関数(仕組み)は、大抵は2種類用意されています。

一つは文章の中に、示された文字列が完全に一致する文字列が含まれているかどうを探すいわば原始的探索で、もう一つはもっと複雑な質問に答える正規表現というものです。

正規表現のお馴染みのものはワイルドカードで、たとえば文書ファイルをみつけるために「*」を使って、「*.txt」と書いて拡張子が[txt]の文書にマッチするものをすべて探し出します。

昔私がPerlを頻繁に使用していたのは、Perlの正規表現がとても強くまた使いやすかったからです。

現在プログラミング言語としてのPerlは人気がなくなりましたが、最近のプログラミング言語は皆Perlを見習って、正規表現の充実を図っています。

今回の作業は、しかし、正規表現を使うまでもないと思います。

続きを読む

PDF教材をHTMLに変換する 2

「学校」にフリガナをつけると下のようになります。

学校 がっこう

手書きや、印刷では「学校」の文字の上に専用の小さいかなを付けているのでしょうが、
WEBではどのようになっているのでしょうか。

WEBでフリガナをつけるには次のような記号列が必要です。
(以下の文を仮にHTML文ということにします)。

<ruby> <rb>学校</rb> <rp>(</rp> <rt>がっこう</rt> <rp>)</rp> </ruby>

これをブラウザ(Micosoft EgeとかChrome)が解釈して、上のように「学校」の上にルビをつけます。

上のHTML文で「(」と「)」で囲まれた部分は、ブラウザが正しくルビが付けられなかったとき、
かっこでかなをつけることになります。

 

さて、教材でカナが付けられたているところは、
全部上のようなHTML文にしなければいけません。

続きを読む

最近のプログラミング言語

前回、
インターネット画面で漢字にルビを付けるプログラムについてご紹介して、
核心的な部分の話を書かないまま1カ月程度経過しました。

今回、久しぶりにプログラムを書いて、
「えー、ソフトの世界は最近はこーなっているの」のような疑問・興味がわいてきて、
その解明・勉強に脱線しています。

今回のプログラムでは、jQueryとBootstrapを必要なところだけ学習しました。
これらはJavascriptのプラグインあるいはライブラリーのようなものです。

Javascriptは昔一度手伝い仕事で使ったことがありますが、
ほんのチョットかじっただけです。

私はJavascriptが好きではなく、まあこんのものかと思っていたら、
実はこの言語はどんどん進化していて、
プログラミング言語としての人気も不動の上位を譲らないようです。

jQueryやBootstrapの人気もJavascriptの人気を押し上げているのでしょう。

私がJavascriptが好きでないのは、
何か「だらだらと、あれもかけるこれも書ける」というような言語仕様になっているところです。

型宣言がないのでユーザとしては相当いい加減なプログラムが書ける。
変数に関数を代入でき、変数をコールすればすなわち関数コールになるなど、
便利といえば便利でしょうが、私としては気持ち悪いのです。
(Cでも変数に関数のアドレスを代入すれば、同様のことはできます。)

続きを読む

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サイトがこのような処理をしているのでしょう。この分野の求人も結構沢山あるようです。