半角カナを全角カナに変換する方法はありますか?

11 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2018 年 7 月 23 日
回答済み: MathWorks Support Team 2018 年 7 月 23 日
半角のカタカナと全角のカタカナが含まれているようなデータを持っています。これを全角のカタカナに共通化してから自然言語処理の解析を行っていきたいと考えています。
半角カタカナの文字を全角に変換する方法はありますか。
なお、特に難しい点として、半角カタカナの場合に濁音や半濁音が2文字として扱われていますが、全角の場合は1文字として扱われています。例えば半角の ゴ という文字は コ と ゛ の2文字として扱われます。
文字数も変わるので単純な変換が難しい状況です。

採用された回答

MathWorks Support Team
MathWorks Support Team 2018 年 7 月 25 日
はい、可能です。
半角カタカナは16進数で表現すると FF62 から FF9F になります。対象の文字列に対して double 関数を掛けることで文字配列をASCIIコードに直すことができます。
半角と全角の対応付けはASCIIコードを使うと複雑のため、対応表を使用すると便利です。
具体的には以下のようなコード(回答上部にある添付ファイル convertHalf2Full.m)で、半角カナから全角カナへ、全角英語から半角英語への変換をしています。
function fullW = convertHalf2Full(word)
% 半角カタカナ → 全角カタカナ
idx1 = hex2dec('FF61') < double(word);
idx2 = (double(word) < hex2dec('FFA0'));
idx = idx1 & idx2;
word(idx) = half2full_Katakana( word(idx) );
word = erase(word, "゛");
word = erase(word, "゜");
% 全角英語 → 半角英語
idx1 = hex2dec('FF01') < double(word);
idx2 = (double(word) < hex2dec('FF5F'));
idx = idx1 & idx2;
word(idx) = full2half_EN( word(idx) );
fullW = word;
end
% -------
function halfW = full2half_EN(fullW)
halfW = char(fullW - 65248);
end
% -------
function fullW = half2full_Katakana(halfW)
% 事前に半角と全角のカタカナ表を回答上部にある添付よりダウンロードしてください
filename = 'KatakanaFullHalf.xlsx';
Katakana = importKatakanaFile(filename);
for i=1:length(halfW)
% 半角カタカナが含まれているインデクスを取得
idx = contains(Katakana.Half, halfW(i));
% 半角を全角で置き換え
halfW(i) = Katakana.Full(idx);
end
% 濁点,半濁点を見つけたら削除
idx_daku = findstr(halfW, "゛");
idx_handaku = findstr(halfW, "゜");
halfW(idx_daku-1) = char( double( halfW(idx_daku-1) ) +1 );
halfW(idx_handaku-1) = char( double( halfW(idx_handaku-1) ) +2 );
fullW = halfW;
end
なお,実行すると以下のような結果になります.
>> a = '私はタマゴとMILKとスムージーとプリンを朝ごはんに食べる.1234';
>> fullW = convertHalf2Full(a)
fullW =
'私はタマゴとMILKとスムージーとプリンを朝ごはんに食べる.1234'

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange文字と文字列 についてさらに検索

製品


リリース

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!