本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

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

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コマンド

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

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.