LoginSignup
4
0

More than 1 year has passed since last update.

【MATLAB】半角カナ <-> 全角カナ 変換

Last updated at Posted at 2020-06-29

やったこと

R2016b 以降のバージョンで使える string 型で半角カナ、全角カナを変換する関数作りました、、と言っても力技なので技術的な面白さとしてはアレなんですが、もし機会あれば使ってくださいませ。

関数はこちらにも上げています:


>> sampleString = '私はタマゴとスムージーとプリンを朝ごはんに食べる';
>> tmp = halfKana2fullKana(sampleString) % 半角 => 全角
   
tmp = '私はタマゴとスムージーとプリンを朝ごはんに食べる'

>> fullKana2halfKana(tmp) % 全角 => 半角

ans = '私はタマゴとスムージーとプリンを朝ごはんに食べる'

こんな具合。

文字置換: replace 関数

さて、どんな実装になっているかというと、文字の置き換えを行う replace 関数 を使うために、対応する半角カナ、全角カナを全部リストしちゃいます。ただの力技です。

濁音、半濁音の取り扱いが少しだけ面倒。半角カナだと2文字になっちゃうんですね。ここは置換の順番で対処します。


% 変換すべき文字リスト作成
halfKana = split("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンー","");
fullKana = split("アイウエオカキクケコサシスセソ" + ...
             "タチツテトナニヌネノハヒフヘホ" + ...
             "マミムメモヤユヨラリルレロワヲンー","");
halfKanaDakuon = split("カキクケコサシスセソタチツテトハヒフヘホ",{'',' '}) + "゙";
fullKanaDakuon = split("ガギグゲゴザジズゼゾダヂヅデドバビブベボ","");
halfKanaHandakuon = split("ハヒフヘホ","") + "゚";
fullKanaHandakuon = split("パピプペポ","");

% 上の作業では冒頭・最後に不要な文字列が入るので削除
halfKana([1,end]) = [];
fullKana([1,end]) = [];
halfKanaDakuon([1,end]) = [];
fullKanaDakuon([1,end]) = [];
halfKanaHandakuon([1,end]) = [];
fullKanaHandakuon([1,end]) = [];

そして replace 関数を使って全角カナ <-> 半角カナを置換してみます。


% 検証(半角 => 全角)
sampleString = '私はタマゴとスムージーとプリンを朝ごはんに食べる';
% 濁音と半濁音は先に変換
tmp = replace(sampleString,halfKanaHandakuon,fullKanaHandakuon);
tmp = replace(tmp,halfKanaDakuon,fullKanaDakuon);
% 残りを変換
sampleStringFull = replace(tmp,halfKana,fullKana)

% 検証(全角 => 半角)
% 濁音と半濁音以外を先に変換
tmp = replace(sampleStringFull,fullKana,halfKana);
% 濁音と半濁音を変換
tmp = replace(tmp,fullKanaDakuon,halfKanaDakuon);
sampleStringHalf = replace(tmp,fullKanaHandakuon,halfKanaHandakuon)

まとめ

特定の文字を置換してみました。
String型ができてから文字列操作は随分楽になった気がします。
もし、他に面白い方法をご存知であればコメントください。

公式ページ:文字配列または string 配列を使用したテキストの表現

関連 Q&A (MATLAB Answers)

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0