CloudSearch使ってるのだけれども、トークナイズ辞書の仕様の所為かひらがなとカタカナでサジェスト時の候補返却内容が異なった。
候補のテキストフィールド自体はカタカナで、カタカナの方が意図する候補を返却していたので、JavaScriptでひらがな/カタカナに変換する方法を模索してみた。
後で加筆予定。
事前知識
Unicodeの各文字範囲
文字種別 | Unicode | Unicodeの示す文字範囲 |
---|---|---|
全角ひらがな | 0x3041 - 0x3096 | ぁ, あ, ぃ, い, ... , ゕ, ゖ |
全角カタカナ | 0x30A1 - 0x30F6 | ァ, ア, ィ, イ, ... , ヵ, ヶ |
半角カタカナ | 0xFF61 - 0xFF9F | (順序が全角ひらがな/カタカナと異なる) |
全角ひらがな → 全角カタカナは +0x60
全角カタカナ → 全角ひらがなは -0x60
,
JavaScriptでの文字操作
str.charCodeAt(index)
与えられたインデックスに位置する文字のUnicodeを10進数で返却する。indexを省略した場合には、str.charCodeAt(0)
と同等。
"あ".charCodeAt() # 12354 "あ".charCodeAt(0) # 12354 "あいう".charCodeAt() # 12354 "あいう".charCodeAt(0) # 12354
String.fromCharCode(num1,...,numN)
Unicode値を引数に渡すことで文字を返す。複数指定すれば文字列として返却する。
String.fromCharCode(0x3042) # "あ" String.fromCharCode(12354) # "あ" String.fromCharCode(12354, 12356) # "あい"
文字コード範囲判定による変換方法
String.prototype.toKatakanaCase = function() { var c, i = this.length, a = []; while(i--) { c = this.charCodeAt(i); a[i] = (0x3041 <= c && c <= 0x3096) ? c + 0x0060 : c; }; return String.fromCharCode.apply(null, a); };
KanaXS/toKatakanaCase.js at master · shogo4405/KanaXS · GitHub
正規表現による変換方法
function hiraganaToKatagana(src) { return src.replace(/[\u3041-\u3096]/g, function(match) { var chr = match.charCodeAt(0) + 0x60; return String.fromCharCode(chr); }); }
カタカナをひらがなに変換する JavaScript 関数、 ひらがなをカタカナに変換する JavaScript 関数 · GitHub
多分これが一番綺麗だと思います。

- 作者: David Flanagan,村上列
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/08/10
- メディア: 大型本
- 購入: 12人 クリック: 252回
- この商品を含むブログ (18件) を見る