第51回技術士全国大会
技術士資格の広報 New
技術士試験合格者祝賀会
熊本地震復興支援会議
2017九州北部豪雨災害への対応
行事一覧
会員専用

C#言語によるひらがな点字変換ソフトの開発


<目次>

1. はじめに

2. ソフト開発の手順

 2.1 開発手順の検討

 2.2 点字のドット間隔の設定

 2.3 点字変換のアルゴリズム

 2.4 開発ソフトの生産工程手順

3. 実行状況(動作状況) 

4. おわりに




1.  はじめに

 ある企業から「ひらがな」文章を点字に変換する作業に苦慮しているので、ソフト開発で省力化できないかと相談を受けた。依頼してきた企業は、各種案内板、点字シールや印刷物を作成する中小企業である。「ひらがな」の文章を一文字ずつ点字に変換する作業をしており、200文字程度の変換作業に1時間程度を要しているとのことであった。市販の点字変換ソフトも購入し使用してみたが、Adobe社のイラストレーターに対応していないので苦慮していた。

 

 そこで、筆者がイラストレーターで点字を書き、ポストスクリプトの書式で出力してみたところ、点字部分のデータが点群の座標データの組合せで表現されていることが分かった。


 その結果を踏まえ、「ひらがな」文字と点字の対応表を作成し、変換時に点字の点群の座標データリストを作成し、ポストスクリプトの書式データに差し替える手法を検討した。



2. ソフト開発の手順

2.1 開発手順の検討

 まず、依頼者の要望に対応すべくAdobe社のイラストレーターで点字を書き、PS(ポストスクリプト)書式にて出力した状況を図1に示す。実際の作業では点字の黒丸の部分を裏側から突起を当て凸状にしている。「あすわ はれでしょー」(表音文字+分かち書き)の文章を点字にした例、およびPS書式に出力されたデータの一部(点字の「あすわ」にあたる部分)を示す。一般的な表現は「あすは はれでしょう(明日は 晴れでしょう)」ですが、点字表記の場合は「表音」で、かつ「分かち書き」で表現されるとのことで、「あすわ はれでしょー」となります。

図1 点字に変化するデータ、変換されたデータおよびPSデータ

 

 この結果、点字の一つの点を表現している部分が図2に示すような座標コードになっていることが分かった。


 一つの点を複数のドット点群で表現している。これは一つの大きな黒丸点で表現すれば開発も容易になるのではないかと考えいくつかの関連資料を調べたが、一つのドット点を大きく表示する方法などを見つけることはできなかった。そのため、イラストレーター上でドットの形状や大きさを正確に再現し、PS書式での完全な互換性を担保するため、解析した既存の書式をそのまま踏襲することとした。

図2 ポストスクリプト書式の点字の一つの点の座標コード

図3 点の表示座標間隔の設定


 図2に示した座標コードは、点字を表現する一つのドットを12個の小さな点群を結んで一つの点を表現しているので、イラストレータが出力したオリジナルのドット間隔を標準設定とし、ユーザーが所望のドットの大きさに調整できるように 、図3に示す「点群間隔の変更機能」をC#言語による独自のロジックを用いて実装した。


 次に、「ひらがな」と点字コードの対応表を図4のように作成した。図4は「ひらがな」だけでなく英字のデータなども含んだデータの一部を示している。

図4 「ひらがな」と点字対応コード表の一部


 図4のデータにおいて、文字の後に7個の数字が並んでいる。一つの文字は、最大6個の点群で表現されている。このような点群による点字の配列順を図5に示す配置図のように、上段の左右、中段の左右、下段の左右の位置の順序で黒点となる位置に「1」が設定するようにした。また、「あ」、「す」、「で」、「しょ」の点字の例を示す。

図5 一つの点字を表現する点群の配置順および例


 また、最後の7番目の記号は、通常の「ひらがな」の場合「0」、濁音「1」、半濁音「2」、数字「3」、英字「5」、拗音「A」とし、7番目の記号が「0」以外の場合は、それぞれの種類に対応した点字の設定コードが挿入されるようにした。


 ここで、図4に示す「こ」と「ご」、「て」と「で」のコードに注目すると、「こ」と「ご」または「て」と「で」において最初の6個までのコードは同じで、「ご」や「で」のように濁音となる場合に7番目の数値が「1」となる。


 同様に「は」、「ば」、「ぱ」の場合には、7番目の数値が濁音の場合「1」、半濁音の場合「2」となる。


このような濁音、半濁音などの設定を示す制御機能コードを図6に示す。

図6 点字の設定コード

2.2 点字のドット間隔の設定

 図7に点字の間隔を設定する機能の例を示す。この間隔は実際の点字のデータから求めた数値を標準値として設定し、拡大・縮小した際に変更できるようにした。

図7 点字の設定コード

2.3 点字変換のアルゴリズム

 図8に点字に変換するひらがな文章の例を示す。この文章は、通常の文章とは異なり発音に対応した「分かち書き」となっている。図8に示す文字列を読み込んで、点字に変換するにあたり、「しょ」のような拗音に注意すべく、2文字ずつ読み込み、拗音であるかどうかを判定するようにした。そして、2文字目が「ゃ」、「ゅ」、「ょ」などの拗音となる場合は、そのことを示す点字コードを挿入するようにした。それ以外の場合には、一文字のみを判別し、濁音、半濁音、英字などの場合には、それぞれの種類を示す点字コードを挿入するようにした。その一例、濁音及び拗音の場合の例を図9に示す。


図8 点字に変換する「ひらがな」文章の例

図9 濁音および拗音の点字変換の例

 図8に示すように、「で」のような濁音の場合は、中段右の位置(図6で示す制御機能コード「1」にある「000100」)に、「しょ」のような拗音の場合は上段右の位置(図6で示す制御機能コード「2」にある「000001」)に黒点が、前の位置に追加される。


 このような処理を実現すべく、Microsoft Visual Studio C#を使用して開発した。開発において、点字コードに対応したクラス「ClsTenji」を作成し、図10に示すようなデータ構造とした。


図10 ClsTenjiのデータ構造

 プログラムでは2文字を読み込み、1文字をMojiAに、2文字目をMojiBに保存する。2文字目のMojiBが「ゃ」、「ゅ」、「ょ」等の拗音文字であれば、それにタイ押した処理を進めた後、その次の文字を読み込み、処理を続ける。そうでなければ、1文字目のMojiAのみで処理を進め、MojiBのデータがMojiAに転送され、次の1文字が読み込まれ、処理が進められる。PosはXY座標をデータとして設定されるクラス(ClsXY)である。bbは点字を構成するドットの黒点とするかどうかを設定する真偽のデータであり、真の場合は黒点とする座標データを出力する。nnは濁音、半濁音、アルファベット英字等の機能制御コードを示すデータである。このようなデータ構造の点字コードをリストとして持たせた。


 その点字コードのリストに、図4に示す点字コードの対応データを読み込み、文字の比較を行い、黒点の表示を示す「1」が設定されている場合に、その点の座標コードを出力し、リストとして保存するようにした。


 そして、その座標コードリストをポストスクリプト書式のデータに挿入し、保存するようにした。このプログラムのフローチャートを図11に示す。


図11 一行分のデータを処理するフローチャート



3. 実行(動作状況)

 開発した「変換ソフト」を起動した状況を図12に示す。「読み込む「ひらがな」データ」の項目で、図8に示すTextファイル「TEST.TXT」を指定し、「変換」コマンドボタンを押すと、ポストスクリプト書式のデータ「TEST.ps」が作成された。


 初期設定ではA4サイズの紙に対して点字を表記するポストスクリプトのデータを出力し、「TEST.ps」として保存される。点字の字間を「17」mm、行間を「33」mm、行の長さを「400」mm、行数を「30」行と設定している。また、点字を書き出す開始位置を(X,Y)=(70.0,70.0)と設定している。これらの数値はユーザー側で変更可能とした。


図12 開発した「点字変換ソフト」の起動状況

 

 さらに、「α、β」等のギリシャ文字に対応した点字コードデータも準備した。そのデータの一部を図13に示す。

図12 ギリシャ文字対応のデータ

 

 また、用紙のサイズA3の縦と横の配置にも対応した。ただし、A4サイズの横の配置は、A3サイズの縦の配置で対応できるため、機能の追加は実施していない。


 この作成されたポストスクリプトのデータをAdobe社イラストレーターで読み込み表示した結果を図14に示す。

図14 出力された点字データ(イラストレーターにて表示



4. おわりに

 当初、Adobe社イラストレーターを使用したことがなく、かつ点字についても全く知識がなかったので、この点字に関する処理の相談はとても戸惑った。


 しかし、点字を表記したポストスクリプトのデータがテキストデータであったこと、また点字の部分のデータが座標データであることに気づき、何とかなるかもしれないと思い取り組んだ。


 点字を構成する6個のドットの一つが、12個の点群で表現されている理由は不明のままであるが、一つの点で表現できれば、より簡単なプログラムになるだろう。


 ポストスクリプトのデータは、A3及びA4サイズの縦、横に設定した状態で点字を記載した場合において出力したデータを解析し、参考にした。そのデータを基に、ヘッダー及びフッター部分を抜き出し、作成した点字を表示する部分を挟み込むようにして作成した。


 この「ひらがな」文章を点字変換するソフトを開発し、従来1時間程度を要していた作業が2分程度に短縮できた。開発には約1か月程度を要したが、大いに喜ばれた。


 最近では「分かち書き」に変換を「Chat GPT」で実現できるようである。組み合わせることで大幅な省力化が期待できる。


 このような点字に関するソフト開発を経験したことで、普段気づかない様々なところに点字が使われていることに気づくようになった。最近、公共機関の階段の手すりにも点字が貼られていることに気づいた。しかし、一般の商店街などではあまり見かけることは多くない。障がいのある方々にとっては、まだまだ十分な環境ではないことに気づかされた。


 この内容は、月刊「技術士」2024年11月号掲載の「C言語による「ひらがな」点字変換ソフトの開発」を基に、さらに詳細を追加・修正しました。




<参考文献>

1) 金城俊哉:VisualC#2013 パーフェクトマスター,株式会社秀和システム,2013年12月23日第1版2) パソコンCAD&CAM 外山真也著 海文堂出版




【執筆者】

外山技術士事務所

代表 外山 真也

技術士(情報工学部門)、博士(工学)

(日本技術士会九州本部/宮崎支部幹事)



【専門事項】

宮崎県工業技術センターにて研究開発に36年間従事、主にCAD/CAM関連の研究開発に従事。C#言語によるソフト開発などを得意とする。現在、宮崎大学工学部などで非常勤講師を務める。




※本記事のご利用にあたって

本記事の内容は執筆者個人の見解に基づくものであり、日本技術士会の公式見解ではありません。また、記事の内容は執筆時点の情報に基づいています。ご利用者様自身の判断と責任において、ご活用頂くようお願いいたします。