Rで解析:漢字の情報を扱おう!!「kanjistat」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

EDRDG KANJIDIC Project 由来の13,108個の漢字データベースを基にして、対象漢字の情報取得やプロットが可能なパッケージの紹介です。

KANJIDIC Projectは下記のとおりです。

https://www.edrdg.org/wiki/index.php/KANJIDIC_Project

漢字データベースは漢字だけでなく、Unicode、画数、常用漢字や教育漢字などの漢字範囲、漢字検定レベル、音読み、訓読みなどが収録されています。また、「tbl class」なので直接操作も可能です。

パッケージバージョンは0.14.1。実行コマンドはwindows 11のR version 4.3.3で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("kanjistat")

コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。

# パッケージの読み込み
library("kanjistat")

### フォントの準備 #####
# システムにあるフォントを確認
Fontlist <- sysfonts::font_files()

# フォントの情報を取得
Meiryo <- systemfonts::match_font("Meiryo")
YuMincho <- systemfonts::match_font("Yu Mincho")
HGSoeiP <- systemfonts::match_font("HGSoeiPresenceEB")
HGGyoshotai <- systemfonts::match_font("HGGyoshotai")

# 使用できるようにフォントを登録
sysfonts::font_add(family = "Meiryo", regular = Meiryo$path)
sysfonts::font_add(family = "YuMincho", regular = YuMincho$path)
sysfonts::font_add(family = "HGSoeiP", regular = HGSoeiP$path)
sysfonts::font_add(family = "HGGyoshotai", regular = HGGyoshotai$path)

# 確認
sysfonts::font_families()
########

# 13,108収録の漢字データベース:kbase
# 構造の確認
str(kbase)
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	13108 obs. of  13 variables:
# $ kanji     : chr  "人" "一" "大" "日" ...
# $ unicode   : 'hexmode' int  4eba 4e00 5927 65e5 51fa 4e2d 672c 5e74 4e0a 5b50 ...
# $ strokes   : int  2 1 3 4 5 4 5 6 3 3 ...
# $ class     : Factor w/ 4 levels "kyouiku","jouyou",..: 1 1 1 1 1 1 1 1 1 1 ...
# $ grade     : int  1 1 1 1 1 1 1 1 1 1 ...
# $ kanken    : Factor w/ 12 levels "10","9","8","7",..: 1 1 1 1 1 1 1 1 1 1 ...
# $ jlpt      : int  5 5 5 5 5 5 5 5 5 5 ...
# $ wanikani  : int  1 1 1 2 2 2 2 4 1 2 ...
# $ frank     : int  1 2 3 4 5 6 7 8 9 11 ...
# $ frank_news: int  5 2 7 1 13 11 10 6 35 72 ...
# $ read_on   : chr  "ジン" "イチ" "ダイ" "ニチ" ...
# $ read_kun  : chr  "ひと" "ひと-" "おお-" "ひ" ...
# $ mean      : chr  "person" "one" "large" "day" ...

# 例えば画数で抽出
# tidyverseパッケージの読み込み
# tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
kbase %>%
  filter(strokes < 3)
# # A tibble: 50 × 13
#   kanji unicode   strokes class   grade kanken  jlpt wanikani frank frank_news read_on read_kun
#   <chr> <hexmode>   <int> <fct>   <int> <fct>  <int>    <int> <int>      <int> <chr>   <chr>   
# 1 人    4eba            2 kyouiku     1 10         5        1     1          5 ジン    ひと    
# 2 一    4e00            1 kyouiku     1 10         5        1     2          2 イチ    ひと-   
# 3 入    5165            2 kyouiku     1 10         5        1    31         56 ニュウ  い.る   
# 4 二    4e8c            2 kyouiku     1 10         5        1    61          9 ニ      ふた    
# 5 力    529b            2 kyouiku     1 10         4        1    65         62 リョク  ちから  
# 6 十    5341            2 kyouiku     1 10         5        1   140          8 ジュウ  とお    
# 7 八    516b            2 kyouiku     1 10         5        1   264         92 ハチ    や      
# 8 九    4e5d            2 kyouiku     1 10         5        1   327         55 キュウ  ここの  
# 9 七    4e03            2 kyouiku     1 10         5        1   420        115 シチ    なな    
#10 刀    5200            2 kyouiku     2 9          1        2   913       1794 トウ    かたな  
# # ℹ 40 more rows
# # ℹ 1 more variable: mean <chr>
# # ℹ Use `print(n = ...)` to see more rows


# 漢字またはUTF-8コードから漢字情報を表示:lookupコマンド
# 漢字またはUTF-8コードを単数,複数を指定:kanjiオプション
# 表示する情報を指定:whatオプション;"readmean","basic","morphologic"

lookup(kanji = "体", what = "readmean")
#体 --> ON: タイ, テイ | kun: からだ, かたち | nanori: なり
#meaning: body, substance, object, reality, counter for images

lookup(kanji = "体", what = "basic")
#  kanji unicode strokes   class grade kanken 
#98   体    4f53       7 kyouiku     2      9    
#  jlpt wanikani frank frank_news read_on read_kun mean
#98   4        5    42         88    タイ   からだ body

lookup(kanji = "体", what = "morphologic")
#   kanji strokes radical radvar nelson_c idc components  skip mean
#98    体       7      人     亻     <NA>  ⿰   本,木,亻 1-2-5 body


# 漢字を簡単プロット:plotkanjiコマンド
# フォントファミリーを指定:familyオプション
plotkanji(rep("体", 4),
          family = c("Meiryo", "YuMincho", "HGSoeiP", "HGGyoshotai"),
          width = NULL, height = NULL)


# 指定した漢字のビットマップオブジェクトを作成:kanjimatコマンド
# オブジェクトはkanjimat
Test <- kanjimat(kanji = "体", family = "HGGyoshotai", size = 512)

# 情報を確認
str(Test)
# List of 8
# $ char     : chr "体"
# $ hex      : 'hexmode' int 4f53
# $ padhex   : chr "04f53"
# $ family   : chr "HGGyoshotai"
# $ size     : num 512
# $ margin   : num 0
# $ antialias: logi TRUE
# $ matrix   : num [1:512, 1:512] 0 0 0 0 0 0 0 0 0 0 ...
# - attr(*, "call")= chr "kanjimat(kanji = \"体\", family = \"HGGyoshotai\", size = 512)"
# - attr(*, "kanjistat_version")=Classes 'package_version', 'numeric_version'  hidden list of 1
# ..$ : int [1:3] 0 14 1
# - attr(*, "Rversion")= chr "R version 4.3.3 (2024-02-29 ucrt)"
# - attr(*, "platform")= chr "x86_64-w64-mingw32"
# - attr(*, "png_type")= chr "cairo"
# - attr(*, "class")= chr "kanjimat"

# プロット
plot(Test)


# 漢字からUTF-8コードを取得:kanjiToCodepointコマンド
kanjiToCodepoint("体")
#[1] "4f53"


# UTF-8コードから漢字を取得:codepointToKanjiコマンド
codepointToKanji("4f53")
#[1] "体"

出力例

・漢字を簡単プロット:plotkanjiコマンド

・指定した漢字のビットマップオブジェクトを作成:kanjimatコマンド


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

タイトルとURLをコピーしました