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

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

Akzeptierte Antwort

MathWorks Support Team
MathWorks Support Team am 25 Jul. 2018
はい、可能です。
半角カタカナは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'

Weitere Antworten (0)

Kategorien

Mehr zu 文字と文字列 finden Sie in Help Center und File Exchange

Produkte


Version

R2017b

Community Treasure Hunt

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

Start Hunting!