はじめに
##注意
base
にchartr
という関数があるみたいです。これを用いれば簡単に変換できます。詳しくは返信欄まで。情報ありがとうございました!
##要旨
~~探しても見つけられなかったので関数を作りました。~~注意にあるように既に関数があります。ということで車輪の再開発になりますが、メモのため残しておきます。題名にある通り、ある「ひらがな」を引数として渡すと、その「カタカナ」を返してくれる関数です。といってもその中身は単純で、入力された文字を文字コードに直して、値をいじり、その文字コードを文字に直しているだけです。単語や文章に対して使う場合は、str_replace_all
関数と一緒に使います。一文字ずつ読み取るので遅いと思います。
方法
実行環境
- Rstudio version 1.2.1335
- R version 3.5.3
- Windows 10
関数概要
まず、入力された文字(ひらがな一文字)を文字コードに変換します。そして、その文字コードを10進数に変換して96を足して対応するカタカナの文字コードにします。最後に、文字に変換してリターンします。
コード
# ライブラリ
library(stringr)
library(stringi)
# 関数
hira2kata <- function(hira){
kata_code <-
hira %>%
stri_escape_unicode() %>%
str_replace(fixed("\\u"), "0x") %>%
strtoi() %>%
"+"(96) %>%
as.hexmode()
kata <-
str_c("\\u", kata_code) %>%
stri_unescape_unicode()
return(kata)
}
# 使用例
hira2kata("あ")
# 単語での使用例
str_replace_all("あいうえお", "\\p{Hiragana}" ,hira2kata)
コード説明
コードを順番に説明していきます。
###ライブラリ
使用するライブラリは、stringr
とstringi
です。
###文字から文字コードへの変換
まず、stri_escape_unicode()
で文字列を文字コードに変換しています。この関数は、先頭に\\u
を伴ったUTF-16文字コードを文字列で返します。
###文字コード(16進数)から10進数への変換
次に、str_replace(fixed("\\u"), "0x")
で、\\u
にマッチしなかった部分をそのままに、マッチした部分を0x
に置換します。これは次の10進数への変換のための処理です。数字列先頭の文字列を0x
とすることにより、16進数であることを明示できます。
そして、strtoi()
で16進数を10進数に変換します。
###10進数での計算
次に、"+"(96)
で96を足します。その理由は、UTF-16文字コード対応表を見てみると分かります。「あ」の文字コード3042
「ア」の文字コードは30A2
です。つまり、16進数で60を足せば、ひらがなからカタカナに変換できるということです。16進数で60は、10進数では96です。
###10進数から16進数への変換
as.hexmode()
で16進数に戻します。
###文字コードから文字への変換
ここでパイプ処理を切って新たなオブジェクトを使用していますが、次のstr_c()
を使うにあたって第一引数にオブジェクトを入れる方法が思いつかなかったので、断腸の思いでこうしています。
str_c("\\u", kata_code)
でUTF-16文字コードに\\u
を結合させます。そして、stri_unescape_unicode()
で文字コードを文字列に変換します。
以上です。
使い方
この関数だけでは一文字しか処理できないので、str_replace_all()
のような置換メソッドを使います。パターンにひらがなの正規表現を、置換する部分に作った関数を渡せば、単語や文章に対して「ひらがな」を「カタカナ」に変換することができます。
注意点
一文字ずつ読み取るので、とても遅いと思います。
最後に
こうすればもっと効率的に分かりやすくかけるよ。こうすればもっと早くなるよ。このメソッドを使ったほうがいいよ。この類のライブラリが既にあるよ。などがあったらご一報いただけたら幸いです。