« [R]CIDから文字を得る | トップページ | [R]tibbleで特定の列の集計を行う »

2023年9月25日 (月)

[R]文字からCIDを得る

ここからファイルaj17-kanji.txtをダウンロードしてカレントディレクトリに置き、以下のコマンドを実行する。

> library(tidyverse)
> tbl <- read_delim("aj17-kanji.txt", delim = "\t", comment = "#", col_names = FALSE, progress = FALSE, show_col_types = FALSE)
> cid0 <- tbl[[1]]
> ucd0 <- tbl[[19]]
> idx <- which(nchar(ucd0) == 6)
> cid <- cid0[idx]
> ucd <- ucd0[idx]
> h1 <- as.integer(as.hexmode(substr(ucd, 3, 4)))
> h2 <- as.integer(as.hexmode(substr(ucd, 5, 6)))
> mx <- matrix(c(h1, h2), ncol = 2)
> s <- character(nrow(mx))
> for (i in 1:nrow(mx)) {
+ s[i] <- iconv(rawToChar(as.raw(mx[i, ])), from = "unicodeFFFE")
+ }

上記は処理を簡単にするため、Unicodeが16進数表記で「U+」を除く4桁の文字のみ取り出している。文字を指定して、CIDを取り出してみる。最後の例のとおり、該当する文字がない場合は数値のNULLが返る。

> idx <- which(s == "江")  # CIDの2000が示す文字は「江」
> print(cid[idx])
[1] 2000
> idx <- which(s == "輪") # CIDの4000が示す文字は「輪」
> print(cid[idx])
[1] 4000
> idx <- which(s == "𩸽") # サロゲートペアの文字は本整理では対象外
> print(cid[idx])
numeric(0)

« [R]CIDから文字を得る | トップページ | [R]tibbleで特定の列の集計を行う »

R(文字と文字列)」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« [R]CIDから文字を得る | トップページ | [R]tibbleで特定の列の集計を行う »

無料ブログはココログ

■■

■■■