2017年5月19日金曜日

ハイフンの重箱の隅

どうもです。ハイフンについて重箱の隅をつついてからペロペロしておこうと思います。

受注した案件のスタイルガイドに、次のような指示があった場合、皆さんどのように処理しますか。

「減算記号にはハイフンを使ってください」
「減算記号には半角ダッシュを使用してください」

言語を仕事にしている会社が書いてよい文章ではないですね。いろいろと問題のある記述ではありますが、まぁほとんどの場合、スタイルガイドの意図は「ハイフンマイナス」という記号です。つまり、キーボートで直接入力できるハイフンマイナス (Hyphen-Minus、\u002D) のことです。


「-」ハイフンマイナス (Hyphen-Minus) \u002D
キーボードの英数モードで直接入力できる ASCII 文字で、ハイフンとマイナスの両方に使用されてきました。事実上の "標準ハイフン" および "標準マイナス" です (少なくとも私の分野では)。

これだけなら、「ハイフン = ハイフンマイナス」と脳内変換すればいいのですが、厄介なことに、「ハイフン」という名称の記号もあります


「‐」ハイフン (Hyphen) \u2010
なんでこんな名称にしたのでしょう...。MS IME では、「ハイフン[全]」表示を選択して入力できます。

名前こそハイフンですが、ASCII には含まれていません。そのため、使用できない場面が多々あります。制限の多い組み込み機器の UI なんかには使用できないんじゃないかな。まぁ、IT 系で「ハイフン」と書かれている場合は、通常、ハイフンマイナスのことです。

ですが、英文の DTP を海外に発注し、DTPer に「減算記号はすべて Hyphen に変更」と指示して、\u2010 を使用されても文句は言えません (実際は起こらないと思いますが)。

まぁ、「ハイフン」という言葉を \u2010 のつもりで記載しているスタイルガイドはないと思いますが、他の演算記号が全角になっているなど、すごく怪しい場合は問い合わせた方が安心です。


ハイフンの種類

次のように、似ている記号がたくさんあります (赤がハイフンマイナス)。
-‑⁃
\u2010\u002D\u2011\u2043


正規表現

ハイフンマイナスの亜種 (というか類似記号) は、以前紹介した次の表現で検出できます。再び説明しておくと、基本ラテン語ブロックと、標準的な日本語関連ブロックから外れた文字を検出する正規表現です。半角カタカナ、全角数字、全角記号、特殊記号、日英以外の文字が検出されます。

基本ラテン文字に存在する記号の全角バージョンは、基本的に特殊文字として扱われます。例外にする場合は、赤字の部分に追加してください。日本語固有のかぎ括弧類は標準の範囲に含まれています。

.NET
[^\p{IsBasicLatin}\p{IsCJKUnifiedIdeographs}\p{IsHiragana}\p{IsKatakana}\p{IsCJKSymbolsandPunctuation}™®]

Perl
[^\x{0000}-\x{007F}\x{4E00}-\x{9FFF}\x{3040}-\x{30FF}\x{3000}-\x{303F}~™®]

ハイフンマイナス以外の類似記号がすべて検出されます。ダッシュは種類を問わず、すべて検出されます。日本語には形が類似している「ー」(長音) や「一」(いち) が存在し、また読みやすさに貢献する場面を見たことがないので、私は基本的にダッシュを使用しません。許容する人は赤字の部分に追加する必要があります。

それなりのボリュームの訳文やメモリに使ってみれば、標準以外のハイフンの混在が意外に多いことに気づくでしょう。

ちなみに私は、どのような案件に対しても、この正規表現または改変版を必ず使用しています。


この記事で言いたかったこと

「世の中の記号をすべて正式名で呼べ」と主張しているわけではありません。日常生活やブログで、ハイフンマイナスをハイフンと呼んでも、正直、どーでもいいんです。

ただし、翻訳という生産物を作成するためのワークフロー内では許されないと思います。

冒頭に記載した「半角ダッシュ」ですが、正直なんのことやら。en Dash も em Dash も表示は半角です。Hypehn-minus の社内俗称なのか、各種ダッシュ (‒、–、—、―) のいずれかを指しているのか、さっぱりわかりません...。

類似記号の多いハイフンやマイナスなどの指示を記述する場合は、翻訳者に誤解を与えないよう配慮する必要があります。つまり、実際の文字を記載するか、コード ポイントを併記する必要があります。


最近のお気に入りエディタ - Sakura Editor

さまざまなエディタを渡り歩いてきましたが、最近は Sakura Editor を使用しています。かなり昔 (20 年前くらい) から開発が続けられているらしいです。

きっかけは、巨大なテキスト ファイルの加工でした。

ある日、正規表現をテストする際の大規模サンプルとして、国立研究開発法人情報通信研究機構が CC ライセンスで公開している XML 形式の対訳コーパスを取り込もうと思い立ちました。

ファイル数が多いので、ちまちま加工していられません。スクリプトを書く気にもならず、コマンド プロンプトで全部連結してから加工することにしました。そしたら、タグも含めて 3 億文字超えのファイルになってしまいました。


インストール済みのエディタでは開くこともままなりません。運よく開けても、加工が遅すぎます。

昔使ったことのある Sakura Editor を思い出し、早速インストール。3 億文字の XML を開くのに 10 秒未満。しかも、軽快にスクロールできます。正規表現での TSV 化加工でも、私が頭をひねる時間を除けば、実質 30 秒くらい。開発者すげーな。50 万文字とかの大きめの案件のチェックや加工なら一瞬です。

もちろん、探せば他にも同等の性能を持つエディタがあると思います。乗り換えを進めているのではなく、大きなファイルの加工で困っている方には役立つかなぁと思って紹介してみました。

ソースも公開しているフリー ソフトウェアですが、コードの著作権は放棄していないようです。正規表現は perl 互換 (Onigmo) です。

Sakura Editor ウンロード ページ




2017年5月12日金曜日

翻訳者と校正者のための正規表現 (16) - 常用漢字以外の検出

常用外の漢字と用法を検出する正規表現を、コツコツと作成していました。形になったので公開したいと思います。

概要

前に JIS 第 1 水準以外の漢字を検出する正規表現を書きました。ところで、なぜ常用漢字ではなく、JIS にしたのでしょう。はい、それは簡単だからです。ただ並べればいいだけですから。

一方、常用漢字は 2010 年の改訂で、JIS に存在しない文字や 16 ビット超えの文字まで追加されてしまいました。Shift_JIS 環境では、コピペだけで常用漢字の一部が文字化けすることがあります (または別の文字に置換されます)。

そのうえ、「常用漢字表」に準拠するには、漢字の種類だけでなく読みも問題になります。ただ単に漢字を検出すれば済む話ではないのです・・・。

そこで、以下の処理を行いました。
  • Shift_JIS にない文字のコードポイント化
  • よく見られる常用外の用法を検出する表現を追加
これで、まあまあの検出結果が得られるようになりました。もちろん用法の誤検出もあり得ます。おかしいなと思ったら、文化庁発行の「常用漢字表」を参照してください。もちろん、誤検出修正や検出精度向上のために随時更新します。

対象エディタ (正規表現エンジン)

Trados Studio など、.NET エンジンを使用しているエディタなら、そのまま使用できるはずです。Trados の場合は、[検索と置換]、[フィルタ表示]、[高度な表示フィルタ]、[検証] のいずれでも使用できます。

また、エンジン固有の機能 (減算や特殊な名前付きブロック) を使っていないので、その他のエンジンでも多少の変更で利用できます。下記の正規表現の赤字部分を、ご使用のエディタでサポートされる形式に変更してください。

たとえば、Perl 互換のエンジンでは \x{0000} の形式で OK だと思います (Onigmo エンジンしかチェックしてません)。もちろん、この変換にも正規表現を使いましょう。このケースなら、置換前の文字列に「\\u([\d+A-F]+)」、置換後の文字列に「\\x\{$1\}」を入力してポチッとな。Perl 互換系では、Sakura Editor と Mery で動作確認済みです。検索ボックス自体に文字数制限のあるエディタ (VxEditor、Notepad++) では使用できませんでした。

深くは解説しませんが、エディタで \u20B9FF (𠮟) がエラーになる場合は、これを削除するしかないと思います。まぁ、大きな影響はないと思います。興味のある方は「叱」と「𠮟」の違いについてググってください。

検出時の処理と注意

いうまでもなく、人名用漢字というものがあります。これらにヒットしすぎて困るような案件の場合は、人名用の常用外漢字と異体字、および人名用常用漢字の異体字を、漢字部分に追加してください。

検出された常用外の漢字や用法の修正についても、注意事項があります。これについては、別記事「常用漢字表の趣旨」を参照してください

ライセンス

LGPL にしてみます。まぁ、後で気が変わるかもしれません。翻訳者の方は、「無保証」以外は何も気にせずに使用および改変して翻訳に使用できます。こんなものにライセンスを付けるなんてと思う方もいるでしょうが、単に、改善版が公開され続けることを意図してライセンスを付けてみました。こうしたらもっと良くなるという方は、ぜひ皆さんの Web で公開してください。

エージェントさんも、このコードを自由に使用および改変できます。ただし、配布する際は、翻訳者が何らかの方法で中身を確認できる形態にすることが義務になります。たとえば、Trados Studio の QA Checker にある [正規表現] ボックスに使用してプロジェクトを配布できますが、まったく確認できない形態での配布は許容されません。各種エディタのマクロとしてプレーン テキストで配布することは可能です。

2017/6/20: 「射」用法の誤検出修正
2017/8/16: 「観」用法の誤検出修正

常用外の漢字と用法を検出する正規表現

[^\u0000-\u4DFF\uA000-\uFFFF亜哀挨愛曖悪握圧扱宛嵐安案暗以衣位囲医依委威為畏胃尉異移萎偉椅彙意違維慰遺緯域育一壱逸茨芋引印因咽姻員院淫陰飲隠韻右宇羽雨唄鬱畝浦運雲永泳英映栄営詠影鋭衛易疫益液駅悦越謁閲円延沿炎怨宴媛援園煙猿遠鉛塩演縁艶汚王凹央応往押旺欧殴桜翁奥横岡屋億憶臆虞乙俺卸音恩温穏下化火加可仮何花佳価果河苛科架夏家荷華菓貨渦過嫁暇禍靴寡歌箇稼課蚊牙瓦我画芽賀雅餓介回灰会快戒改怪拐悔海界皆械絵開階塊楷解潰壊懐諧貝外劾害崖涯街慨蓋該概骸垣柿各角拡革格核殻郭覚較隔閣確獲嚇穫学岳楽額顎掛潟括活喝渇割葛滑褐轄且株釜鎌刈干刊甘汗缶完肝官冠巻看陥乾勘患貫寒喚堪換敢棺款間閑勧寛幹感漢慣管関歓監緩憾還館環簡観韓艦鑑丸含岸岩玩眼頑顔願企伎危机気岐希忌汽奇祈季紀軌既記起飢鬼帰基寄規亀喜幾揮期棋貴棄毀旗器畿輝機騎技宜偽欺義疑儀戯擬犠議菊吉喫詰却客脚逆虐九久及弓丘旧休吸朽臼求究泣急級糾宮救球給嗅窮牛去巨居拒拠挙虚許距魚御漁凶共叫狂京享供協況峡挟狭恐恭胸脅強教郷境橋矯鏡競響驚仰暁業凝曲局極玉巾斤均近金菌勤琴筋僅禁緊錦謹襟吟銀区句苦駆具惧愚空偶遇隅串屈掘窟熊繰君訓勲薫軍郡群兄刑形系径茎係型契計恵啓掲渓経蛍敬景軽傾携継詣慶憬稽憩警鶏芸迎鯨隙劇撃激桁欠穴血決結傑潔月犬件見券肩建研県倹兼剣拳軒健険圏堅検嫌献絹遣権憲賢謙鍵繭顕験懸元幻玄言弦限原現舷減源厳己戸古呼固股虎孤弧故枯個庫湖雇誇鼓錮顧五互午呉後娯悟碁語誤護口工公勾孔功巧広甲交光向后好江考行坑孝抗攻更効幸拘肯侯厚恒洪皇紅荒郊香候校耕航貢降高康控梗黄喉慌港硬絞項溝鉱構綱酵稿興衡鋼講購乞号合拷剛傲豪克告谷刻国黒穀酷獄骨駒込頃今困昆恨根婚混痕紺魂墾懇左佐沙査砂唆差詐鎖座挫才再災妻采砕宰栽彩採済祭斎細菜最裁債催塞歳載際埼在材剤財罪崎作削昨柵索策酢搾錯咲冊札刷刹拶殺察撮擦雑皿三山参桟蚕惨産傘散算酸賛残斬暫士子支止氏仕史司四市矢旨死糸至伺志私使刺始姉枝祉肢姿思指施師恣紙脂視紫詞歯嗣試詩資飼誌雌摯賜諮示字寺次耳自似児事侍治持時滋慈辞磁餌璽鹿式識軸七叱\u20B9FF失室疾執湿嫉漆質実芝写社車舎者射捨赦斜煮遮謝邪蛇尺借酌釈爵若弱寂手主守朱取狩首殊珠酒腫種趣寿受呪授需儒樹収囚州舟秀周宗拾秋臭修袖終羞習週就衆集愁酬醜蹴襲十汁充住柔重従渋銃獣縦叔祝宿淑粛縮塾熟出述術俊春瞬旬巡盾准殉純循順準潤遵処初所書庶暑署緒諸女如助序叙徐除小升少召匠床抄肖尚招承昇松沼昭宵将消症祥称笑唱商渉章紹訟勝掌晶焼焦硝粧詔証象傷奨照詳彰障憧衝賞償礁鐘上丈冗条状乗城浄剰常情場畳蒸縄壌嬢錠譲醸色拭食植殖飾触嘱織職辱尻心申伸臣芯身辛侵信津神唇娠振浸真針深紳進森診寝慎新審震薪親人刃仁尽迅甚陣尋腎須図水吹垂炊帥粋衰推酔遂睡穂随髄枢崇数据杉裾寸瀬是井世正生成西声制姓征性青斉政星牲省凄逝清盛婿晴勢聖誠精製誓静請整醒税夕斥石赤昔析席脊隻惜戚責跡積績籍切折拙窃接設雪摂節説舌絶千川仙占先宣専泉浅洗染扇栓旋船戦煎羨腺詮践箋銭潜線遷選薦繊鮮全前善然禅漸膳繕狙阻祖租素措粗組疎訴塑遡礎双壮早争走奏相荘草送倉捜挿桑巣掃曹曽爽窓創喪痩葬装僧想層総遭槽踪操燥霜騒藻造像増憎蔵贈臓即束足促則息捉速側測俗族属賊続卒率存村孫尊損遜他多汰打妥唾堕惰駄太対体耐待怠胎退帯泰堆袋逮替貸隊滞態戴大代台第題滝宅択沢卓拓託濯諾濁但達脱奪棚誰丹旦担単炭胆探淡短嘆端綻誕鍛団男段断弾暖談壇地池知値恥致遅痴稚置緻竹畜逐蓄築秩窒茶着嫡中仲虫沖宙忠抽注昼柱衷酎鋳駐著貯丁弔庁兆町長挑帳張彫眺釣頂鳥朝貼超腸跳徴嘲潮澄調聴懲直勅捗沈珍朕陳賃鎮追椎墜通痛塚漬坪爪鶴低呈廷弟定底抵邸亭貞帝訂庭逓停偵堤提程艇締諦泥的笛摘滴適敵溺迭哲鉄徹撤天典店点展添転\u5861田伝殿電斗吐妬徒途都渡塗賭土奴努度怒刀冬灯当投豆東到逃倒凍唐島桃討透党悼盗陶塔搭棟湯痘登答等筒統稲踏糖頭謄藤闘騰同洞胴動堂童道働銅導瞳峠匿特得督徳篤毒独読栃凸突届屯豚頓貪鈍曇丼那奈内梨謎鍋南軟難二尼弐匂肉虹日入乳尿任妊忍認寧熱年念捻粘燃悩納能脳農濃把波派破覇馬婆罵拝杯背肺俳配排敗廃輩売倍梅培陪媒買賠白伯拍泊迫\u525D舶博薄麦漠縛爆箱箸畑肌八鉢発髪伐抜罰閥反半氾犯帆汎伴判坂阪板版班畔般販斑飯搬煩頒範繁藩晩番蛮盤比皮妃否批彼披肥非卑飛疲秘被悲扉費碑罷避尾眉美備微鼻膝肘匹必泌筆姫百氷表俵票評漂標苗秒病描猫品浜貧賓頻敏瓶不夫父付布扶府怖阜附訃負赴浮婦符富普腐敷膚賦譜侮武部舞封風伏服副幅復福腹複覆払沸仏物粉紛雰噴墳憤奮分文聞丙平兵併並柄陛閉塀幣弊蔽餅米壁璧癖別蔑片辺返変偏遍編弁便勉歩保哺捕補舗母募墓慕暮簿方包芳邦奉宝抱放法泡胞俸倣峰砲崩訪報蜂豊飽褒縫亡乏忙坊妨忘防房肪某冒剖紡望傍帽棒貿貌暴膨謀\u9830北木朴牧睦僕墨撲没勃堀本奔翻凡盆麻摩磨魔毎妹枚昧埋幕膜枕又末抹万満慢漫未味魅岬密蜜脈妙民眠矛務無夢霧娘名命明迷冥盟銘鳴滅免面綿麺茂模毛妄盲耗猛網目黙門紋問冶夜野弥厄役約訳薬躍闇由油喩愉諭輸癒唯友有勇幽悠郵湧猶裕遊雄誘憂融優与予余誉預幼用羊妖洋要容庸揚揺葉陽溶腰様瘍踊窯養擁謡曜抑沃浴欲翌翼拉裸羅来雷頼絡落酪辣乱卵覧濫藍欄吏利里理痢裏履璃離陸立律慄略柳流留竜粒隆硫侶旅虜慮了両良料涼猟陵量僚領寮療瞭糧力緑林厘倫輪隣臨瑠涙累塁類令礼冷励戻例鈴零霊隷齢麗暦歴列劣烈裂恋連廉練錬呂炉賂路露老労弄郎朗浪廊楼漏籠六録麓論和話賄脇惑枠湾腕]|愛しい|愛でる|哀し|悪し|圧す|以て|威す|為[さしすせそらりるれろ]|依[らりるれろ]|遺す|逸[らりるれろ]|印[さしすせそ]|益々|悦[ばびぶべぼ]|往[かきくけこ]|憶え|温い|禍々|画く|化[わえ]|何れ|害う|概ね|解[らりるれろ]|較べ|覚る|括[らりるれろ]|活[かきけ]|喚く|喚[かきくけこ]|看[るれろてな]|観[たてるれろ]|観な[いかけ]|還[さしすせそ]|希[^\u4E00-\u9FFF]|棄て|宜し|起つ|企[まみむめも]|旧い|急[かく]|空し|虚し|恐[いが]|屈[まみむめも]|係わ|顕れ|厳つ|紅い|司る|自ず|旨い|失せ|赦[さしすせそ]|[^\u4E00-\u9FFF]射[さしすせそ]|充[たち]|称え|浸[みか]|選り|想[いうえおわ]|即ち|貯え|直ぐ|墜ち|点[きくけこ]|点[かな]凍て|盗[らりるれろ]|難い|別け|報せ|未だ|密か|優る|易[いく]







常用漢字表の趣旨について

記事の目的

常用外漢字を排除したために、読みにくくなっている文書をときどき見かけます。常用漢字表についての誤解があるようですので、記事を 1 本書いておこうと思いました。

政府の公用文なら、まぁ、常用外の漢字や用法を厳しく制限してよいでしょう。ただし、一般企業の場合は、この表に基づきながらも、「業界の常用」を考慮して賢明な判断を下す必要があると考えます。

常用漢字表の趣旨

常用漢字表の「前書き」にある 5 項目をよく読んでいただければ、この表の趣旨がわかると思います。いや、読まないだろうから引用しておきます (笑)。強調したい部分をハイライトしていますが、全部読んでくださいね。

===引用開始===
  1. この表は,法令,公⽤⽂書,新聞,雑誌,放送など,⼀般の社会⽣活において,現代の国語を書き表す場合の漢字使⽤の⽬安を⽰すものである。
  2. この表は,科学,技術,芸術その他の各種専⾨分野や個々⼈の表記にまで及ぼそうとするものではない。ただし,専⾨分野の語であっても,⼀般の社会⽣活と密接に関連する語の表記については,この表を参考とすることが望ましい
  3. この表は,都道府県名に⽤いる漢字及びそれに準じる漢字を除き,固有名詞を対象とするものではない。
  4. この表は,過去の著作や⽂書における漢字使⽤を否定するものではない。
  5. この表の運⽤に当たっては,個々の事情に応じて適切な考慮を加える余地のあるものである
===引用終了===

上記の 1、2、5 からわかるように、技術文書に対して「常用漢字以外は絶対排除」という処理を適用することは、この表本来の趣旨に反しています。エージェントさんであれば「原則として常用漢字表に準拠」ぐらいの指示が適切でしょう。

個人的な修正方針

原則として常用漢字表に準拠していますが、状況に応じて読み手のために例外を設けています。では、私が実際に翻訳をどのように修正しているのか示します。

  • 読みやすさに影響しないのであれば修正します。常用外の用法、たとえば「即ち」「未だ」「し易い」「し難い」「益々」などは、容赦なく修正します。また、単発で重要性の低い常用外の漢字も修正します。
  • 理解の妨げになるような修正はしません。「同梱のネジ」を「同こんのネジ」にすることはありません。そのままにするか、「付属のネジ」のように書き換えます。「綴じた文書」も「とじた文書」にはしません。「綴」は印刷/製本業界で広く許容されている常用外漢字です。
  • 法的な概念を持つ言葉は修正しません。たとえば「瑕疵」はそのままにします。その他の文脈では「瑕疵 (かし)」「不具合」「欠陥」にするかなぁ。でも、「かし」にすることは、まずありません。

読み手を第一に考える必要があります。クライアントさんとよく相談して判断してください。申し送りに含める方法もあります。常用外を使用して読みやすくなるなら、あっさりと受け入れると思います。

企業側の対応例

常用漢字表に従うことをスタイルガイドに明記している某 IT 企業のサイトで、「脆弱性」と「ぜい弱性」、「梱包」と「こん包」を検索してみました。

脆弱性: 47,700 件
ぜい弱性: 43 件
梱包: 697 件
こん包: 0 件

このように、常用漢字を指定している企業でも、臨機応変に対応しています。

まとめ

自分の場合は、常用外漢字を排除対象としてみるのではなく、高価な素材とみる方がしっくりきます。たとえばレアアースなんか、代替素材で同等以上の性能が出るのならどんどん切り替えると思います。逆に性能が落ちてしまうのであれば、慎重に考えてから判断しますよね。