PDFからコピペした文字が微妙に変になったら

PDF内のテキストをコピペすると一部の漢字が「⾯」のように少し小さくひしゃげてしまう事がある。
これは康熙部首やCJK部首補助という本来は部首を示す漢字に誤変換(?)されるらしい。
過去に書いたUTF-8-MAC(NFD)の問題も含めて対策した日本語をノーマライズするライブラリを作ってみました。
https://github.com/uda2/jpnormalizer
いづれも「読め無いわけでは無いからそのままでええやん」って感想の人も多いかもしれないですがWindowsのファイル名にUTF-8-MACを使うと一部のソフトで不都合が起きたりスクリプトで検索の際に別の文字なのでヒットしないという問題が発生しますので、マックユーザー向けにファイルアップロード機能を付けるときやPDFの内容をコピペする可能性の高いフォームでは有用かと思います。
言語はJavascript版とPHP版を用意しています。
中味はWikipedia等で情報を集めて置換してるだけですが、最初にテキストに該当箇所が無ければ変換処理をしないので負荷は低いかと思います。
Javascriptの方はnormalizeという関数が用意されていて
UTF-8-MAC問題だけなら.normalize(“NFC”)、康熙部首も変換したいなら.normalize(“NFKC”)と実行すると変換可能でネイティブな分処理的には速いのですが
多言語用の不必要な文字も変換されてしまうのに、CJK部首補助が変換されないという
濁音半濁音だけでなく全ての言語を正規化するので結果負荷が多めなので自前で用意しています。
PHPの方もNormalizer::normalize()があり、php-intlをインストールするか有効化すると使えるが
Javascriptnormalize関数と同様に多言語対応のライブラリで冗長なので自前で変換テーブルを用意して変換しています。
Githubとかいいから使ってみたいって方のためにお試し版も用意してます。
https://uda2.com/github/jpnormalizer_sample.php
※UTF-8-MAC(NFD)の問題はMacのファイルシステムがHFS+からAPFSになってかなり減ってます。
※NFCの変換するなら半角→全角も組み込んでも良さそうですがAA(アスキーアート)とかで使うので敢えて入れてません。
Tags: Github, JavaScript, PHP