Unicode パッケージは Unicode 16.0.0 のデータセットと、それを R から簡便に扱うためのユーティリティ群を提供します。文字コードの変換、大文字小文字の正規化、スクリプト・ブロックの取得、名前検索など、テキスト処理で頻出する作業を簡単に実行できるのが特徴です。
パッケージバージョンは16.0.0-1。実行コマンドはR version 4.5.0で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
install.packages("Unicode") # CRAN からインストール
主要機能ハイライト
分類 | 主な関数 | 目的 |
---|---|---|
Unicode 文字の大文字・小文字変換 | u_to_lower_case() / u_to_upper_case() / u_to_title_case() / u_case_fold() | デフォルトの Unicode アルゴリズムによるケースマッピングを実施。 |
コードポイント数の計算 | n_of_u_chars() | 文字列やコードレンジ中のコードポイント数を返す。 |
簡易トークナイザ | Unicode_alphabetic_tokenizer() | アルファベットプロパティを使った単語分割。 |
ブロック / スクリプト情報 | u_blocks() / u_scripts() | 指定したブロック・スクリプトのコードレンジを取得。 |
文字プロパティ・メタ情報 | u_char_info() / u_char_properties() / u_char_property() | コードポイントの詳細プロパティをデータフレームで取得。 |
文字名・検索 | u_char_name() / u_char_from_name() / u_char_label() | 文字名からコードポイントを引く、逆引きなど。 |
マッチング・包含判定 | u_char_match() / %uin% | 文字がレンジに含まれるか判定。 |
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
まずは、パッケージを読み込みます。
# パッケージの読み込み
library("Unicode")
1 小文字・大文字・タイトルケース
LETTERS # ベースライン
"A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
u_to_lower_case(LETTERS) # 小文字化
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
u_to_upper_case("heiss") # 大文字化
[1] "HEISS"
u_case_fold()
を使えば case‑folding(言語依存しない大小一致判定用の正規化)を行えます。
u_case_fold("Hi Dave.")
"hi dave."
なお、Unicode
パッケージ単体では全角半角変換を直接提供しませんが、マッピング後に stringi::stri_trans_nfkc()
と組み合わせることで正規化パイプラインを構築できます。
2. コードポイント数を数える
latn_cyrl <- u_scripts(c("Latn", "Cyrl")) # ラテン・キリル
# 内容確認
latn_cyrl
$Latin
[1] U+0041..U+005A U+0061..U+007A U+00AA U+00BA U+00C0..U+00D6
[6] U+00D8..U+00F6 U+00F8..U+01BA U+01BB U+01BC..U+01BF U+01C0..U+01C3
[11] U+01C4..U+0293 U+0294 U+0295..U+02AF U+02B0..U+02B8 U+02E0..U+02E4
[16] U+1D00..U+1D25 U+1D2C..U+1D5C U+1D62..U+1D65 U+1D6B..U+1D77 U+1D79..U+1D9A
[21] U+1D9B..U+1DBE U+1E00..U+1EFF U+2071 U+207F U+2090..U+209C
[26] U+212A..U+212B U+2132 U+214E U+2160..U+2182 U+2183..U+2184
[31] U+2185..U+2188 U+2C60..U+2C7B U+2C7C..U+2C7D U+2C7E..U+2C7F U+A722..U+A76F
[36] U+A770 U+A771..U+A787 U+A78B..U+A78E U+A78F U+A790..U+A7CD
[41] U+A7D0..U+A7D1 U+A7D3 U+A7D5..U+A7DC U+A7F2..U+A7F4 U+A7F5..U+A7F6
[46] U+A7F7 U+A7F8..U+A7F9 U+A7FA U+A7FB..U+A7FF U+AB30..U+AB5A
[51] U+AB5C..U+AB5F U+AB60..U+AB64 U+AB66..U+AB68 U+AB69 U+FB00..U+FB06
[56] U+FF21..U+FF3A U+FF41..U+FF5A U+10780..U+10785 U+10787..U+107B0 U+107B2..U+107BA
[61] U+1DF00..U+1DF09 U+1DF0A U+1DF0B..U+1DF1E U+1DF25..U+1DF2A
$Cyrillic
[1] U+0400..U+0481 U+0482 U+0483..U+0484 U+0487 U+0488..U+0489
[6] U+048A..U+052F U+1C80..U+1C8A U+1D2B U+1D78 U+2DE0..U+2DFF
[11] U+A640..U+A66D U+A66E U+A66F U+A670..U+A672 U+A673
[16] U+A674..U+A67D U+A67E U+A67F U+A680..U+A69B U+A69C..U+A69D
[21] U+A69E..U+A69F U+FE2E..U+FE2F U+1E030..U+1E06D U+1E08F
lapply(latn_cyrl, n_of_u_chars) # 各レンジ内の文字数
$Latin
[1] 26 26 1 1 23 31 195 1 4 4 208 1 27 9 5 38 49 4 13 34 36 256 1
[24] 1 13 2 1 1 35 2 4 28 2 2 78 1 23 4 1 62 2 1 8 3 2 1
[47] 2 1 5 43 4 5 3 1 7 26 26 6 42 9 10 1 20 6
$Cyrillic
[1] 130 1 2 1 2 166 11 1 1 32 46 1 1 3 1 10 1 1 28 2 2 2 62
[24] 1
3. Unicode ブロックとスクリプト
## ブロック一覧を取得
blocks <- u_blocks()
length(blocks) # ブロック数
[1] 338
names(blocks)[1:10] # 先頭10ブロック名
[1] "Adlam" "Aegean Numbers"
[3] "Ahom" "Alchemical Symbols"
[5] "Alphabetic Presentation Forms" "Anatolian Hieroglyphs"
[7] "Ancient Greek Musical Notation" "Ancient Greek Numbers"
[9] "Ancient Symbols" "Arabic"
## 特定ブロックをフィルタ
kana <- u_blocks("Katakana")
str(kana)
4. 文字情報を深掘りする
## Euro Sign (U+20AC) が Unicode に追加されたバージョンを確認
x <- u_char_from_name("EURO SIGN")
u_char_property(x, "Age") #=> "2.1"
## プロパティ一覧
head(u_char_properties())
u_char_info()
は主要 15 プロパティを含むデータフレームを返すため、dplyr と組み合わせた集計が便利です。
5. 名前検索と正規表現
名前ベースの検索は「絵文字一覧を抜き出したい」「特定の通貨シンボルを収集したい」という場合に大変便利です。
## "DIGIT ONE" を名前に含む全コードポイントを取得
ones <- u_char_from_name("\\bDIGIT ONE\\b", type = "grep")
head(u_char_name(ones))
6. 可視化デモ:スクリプトごとの文字数のランキング
# tidyverseパッケージの読み込み
# tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
install.packages("tidyverse");require("tidyverse")
}
script_sizes <- lapply(u_scripts(), function(rng) sum(n_of_u_chars(rng)))
script_df <- data.frame(script = names(script_sizes), n = unlist(script_sizes))
script_df <- script_df |> arrange(desc(n))
# 上位 15 スクリプトを棒グラフ
script_df |> slice_head(n = 15) |>
ggplot(aes(reorder(script, n), n)) +
geom_col() +
coord_flip() +
labs(x = "Script", y = "Code Points", title = "Top 15 Unicode Scripts by Code‑Point Count")

少しでも、あなたの解析が楽になりますように!!