日本語を含むデータを処理する場合正規表現だけでは処理できない場合があります。このような場合には日本語処理に特化したNippon
パッケージが便利です。
Packages and Datasets
本ページではR version 3.4.4 (2018-03-15)の標準パッケージ以外に以下の追加パッケージを用いています。
Package | Version | Description |
---|---|---|
tidyverse | 1.2.1 | Easily Install and Load the ‘Tidyverse’ |
Nippon | 0.7.1 | Japanese Utility Functions and Data |
stringi | 1.2.4 | Character String Processing Facilities |
また、本ページでは以下のデータセットを用いています。
Dataset | Package | Version | Description |
---|---|---|---|
han | N/A | N/A | 半角文字のデータセット(自作) |
han_kana | N/A | N/A | 半角カナ文字のデータセット(自作) |
zen | N/A | N/A | 全角文字のデータセット(自作) |
zen
## # A tibble: 10 x 8
## 全角大文字 全角小文字 全角数字 全角かな 全角カナ 全角記号 漢数字 単位
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 A a 0 あ ア ! 〇 十
## 2 B b 1 い イ # 一 百
## 3 C c 2 う ウ $ 二 千
## 4 D d 3 え エ % 三 万
## 5 E e 4 お オ & 四 億
## 6 F f 5 か カ + 五 一十
## 7 G g 6 き キ ー 六 一百
## 8 H h 7 く ク * 七 一千
## 9 I i 8 け ケ / 八 一万
## 10 J j 9 こ コ ? 九 一億
han
## # A tibble: 10 x 5
## 半角大文字 半角小文字 半角数字 半角カナ 半角記号
## <chr> <chr> <int> <chr> <chr>
## 1 A a 0 ア !
## 2 B b 1 イ #
## 3 C c 2 ウ $
## 4 D d 3 エ %
## 5 E e 4 オ &
## 6 F f 5 カ +
## 7 G g 6 キ -
## 8 H h 7 ク *
## 9 I I 8 ケ /
## 10 J j 9 コ ?
han_kana
## # A tibble: 15 x 11
## ア行 カ行 サ行 タ行 ナ行 ハ行 マ行 ヤ行 ラ行 ワ行 その他
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 ア カ サ タ ナ ハ マ ヤ ラ ワ ゙
## 2 イ キ シ チ ニ ヒ ミ ユ リ <NA> ゚
## 3 ウ ク ス ツ ヌ フ ム ヨ ル <NA> ー
## 4 エ ケ セ テ ネ ヘ メ <NA> レ <NA> 。
## 5 オ コ ソ ト ノ ホ モ <NA> ロ ヲ 、
## 6 <NA> ガ ザ ダ <NA> バ <NA> <NA> <NA> <NA> 「
## 7 <NA> ギ ジ ヂ <NA> ビ <NA> <NA> <NA> <NA> 」
## 8 ヴ グ ズ ヅ <NA> ブ <NA> <NA> <NA> <NA> <NA>
## 9 <NA> ゲ ゼ デ <NA> ベ <NA> <NA> <NA> <NA> <NA>
## 10 <NA> ゴ ゾ ド <NA> ボ <NA> <NA> <NA> <NA> <NA>
## 11 ァ <NA> <NA> <NA> <NA> パ <NA> ャ <NA> <NA> <NA>
## 12 ィ <NA> <NA> <NA> <NA> ピ <NA> ュ <NA> <NA> <NA>
## 13 ゥ <NA> <NA> ッ <NA> プ <NA> ョ <NA> <NA> <NA>
## 14 ェ <NA> <NA> <NA> <NA> ペ <NA> <NA> <NA> <NA> <NA>
## 15 ォ <NA> <NA> <NA> <NA> ポ <NA> <NA> <NA> ン <NA>
全角半角変換
英数記号の全角と半角が混在している場合にはNippon::zen2han
関数またはNippon::han2zen
関数が便利です。ヘルプに記載されているように全角半角の双方向に変換できるのはアルファベット、数字、記号のみです。漢数字は半角に変換できますが、漢字、平仮名、片仮名は半角に変換できません。
Nippon::zen2han
関数の返り値は単一ベクトル型になりますのでデータフレームに対して適用したい場合はdplyr::rowwise
関数を用いて行毎に適用してください。
zen %>%
dplyr::select('全角大文字', '全角小文字', '全角数字', '全角記号') %>%
dplyr::rowwise() %>%
dplyr::mutate('半角大文字' = Nippon::zen2han(全角大文字),
'半角小文字' = Nippon::zen2han(全角小文字),
'半角数字' = Nippon::zen2han(全角数字),
'半角記号' = Nippon::zen2han(全角記号)) %>%
dplyr::select('全角大文字', '半角大文字', '全角小文字', '半角小文字',
'全角数字', '半角数字', '全角記号', '半角記号')
## Source: local data frame [10 x 8]
## Groups: <by row>
##
## # A tibble: 10 x 8
## 全角大文字 半角大文字 全角小文字 半角小文字 全角数字 半角数字 全角記号
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 A A a a 0 0 !
## 2 B B b b 1 1 #
## 3 C C c c 2 2 $
## 4 D D d d 3 3 %
## 5 E E e e 4 4 &
## 6 F F f f 5 5 +
## 7 G G g g 6 6 ー
## 8 H H h h 7 7 *
## 9 I I i i 8 8 /
## 10 J J j j 9 9 ?
## # ... with 1 more variable: 半角記号 <chr>
Nippon::han2zen
関数の返り値の型はNippon::zen2han
関数と異なり通常のベクトル型になりますのでデータフレームに対して適用する場合でもdplyr::rowwise
関数を用いる必要はありません。なお、変換元のデータ形式は文字型である必要がありますので注意してください。
han %>%
dplyr::mutate('全角大文字' = Nippon::han2zen(半角大文字),
'全角小文字' = Nippon::han2zen(半角小文字),
'全角数字' = Nippon::han2zen(as.character(半角数字)),
'全角記号' = Nippon::han2zen(半角記号),
'全角カナ' = Nippon::han2zen(半角カナ)) %>%
dplyr::select('半角大文字', '全角大文字', '半角小文字', '全角小文字',
'半角数字', '全角数字', '半角記号', '全角記号',
'半角カナ', '全角カナ')
## # A tibble: 10 x 10
## 半角大文字 全角大文字 半角小文字 全角小文字 半角数字 全角数字 半角記号
## <chr> <chr> <chr> <chr> <int> <chr> <chr>
## 1 A A a a 0 0 !
## 2 B B b b 1 1 #
## 3 C C c c 2 2 $
## 4 D D d d 3 3 %
## 5 E E e e 4 4 &
## 6 F F f f 5 5 +
## 7 G G g g 6 6 -
## 8 H H h h 7 7 *
## 9 I I I I 8 8 /
## 10 J J j j 9 9 ?
## # ... with 3 more variables: 全角記号 <chr>, 半角カナ <chr>,
## # 全角カナ <chr>
平仮名片仮名変換
平仮名と片仮名が混在している場合にはNippon::hira2kana
関数またはNippon::kana2hira
関数が便利です。
zen %>%
dplyr::select('全角かな', '全角カナ') %>%
dplyr::mutate('カナ変換' = Nippon::hira2kata(全角かな),
'かな変換' = Nippon::kata2hira(全角カナ)) %>%
dplyr::select('全角かな', 'カナ変換', '全角カナ', 'かな変換')
## # A tibble: 10 x 4
## 全角かな カナ変換 全角カナ かな変換
## <chr> <chr> <chr> <chr>
## 1 あ ア ア あ
## 2 い イ イ い
## 3 う ウ ウ う
## 4 え エ エ え
## 5 お オ オ お
## 6 か カ カ か
## 7 き キ キ き
## 8 く ク ク く
## 9 け ケ ケ け
## 10 こ コ コ こ
漢数字変換
漢数字をアラビア数字に変換するにはNippon::kansu2arabic
関数を用います。Nippon::kansu2arabic
関数は単一の文字列ベクトル変数(スカラー変数)に対してのみ有効ですので、データフレーム型に適用する場合にはdplyr::rowwise
関数で行毎に処理を適用させる必要があります。漢数字以外に適用してもエラーになりますので注意してください。
また、“十”、“百”、“千”のように“一”を省略しても数値として意味をなす場合は正しく変換してくれますが、万“、”億“などのように単位だけでは数値として意味をなしにくい場合は正しく変換してくれませんので必ず頭に漢数字を添えてください。
zen %>%
dplyr::select('漢数字', '単位') %>%
dplyr::rowwise() %>%
dplyr::mutate(Arabic = Nippon::kansu2arabic(漢数字),
Unit = Nippon::kansu2arabic(単位)) %>%
dplyr::select('漢数字', Arabic, '単位', Unit)
## Source: local data frame [10 x 4]
## Groups: <by row>
##
## # A tibble: 10 x 4
## 漢数字 Arabic 単位 Unit
## <chr> <dbl> <chr> <dbl>
## 1 〇 0 十 10
## 2 一 1 百 100
## 3 二 2 千 1000
## 4 三 3 万 0
## 5 四 4 億 0
## 6 五 5 一十 10
## 7 六 6 一百 100
## 8 七 7 一千 1000
## 9 八 8 一万 10000
## 10 九 9 一億 100000000
半角全角変換
日本語を含んだデータを扱う上で厄介なのが半角カナ文字です。前述のNippon
パッケージでは残念ながら半角全角変換をサポートしていませんので半角カナ文字を扱う場合はstringi
パッケージのstringi::str_trans_nfkc
関数を用います。この関数はICU(International Components for Unicode)
ライブラリを利用して変換を行っているようです。濁点半濁点、拗音促音、その他を含む半角カナ文字も正しく変換してくれます。前者が変換前、後者が変換後です。
han_kana
## # A tibble: 15 x 11
## ア行 カ行 サ行 タ行 ナ行 ハ行 マ行 ヤ行 ラ行 ワ行 その他
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 ア カ サ タ ナ ハ マ ヤ ラ ワ ゙
## 2 イ キ シ チ ニ ヒ ミ ユ リ <NA> ゚
## 3 ウ ク ス ツ ヌ フ ム ヨ ル <NA> ー
## 4 エ ケ セ テ ネ ヘ メ <NA> レ <NA> 。
## 5 オ コ ソ ト ノ ホ モ <NA> ロ ヲ 、
## 6 <NA> ガ ザ ダ <NA> バ <NA> <NA> <NA> <NA> 「
## 7 <NA> ギ ジ ヂ <NA> ビ <NA> <NA> <NA> <NA> 」
## 8 ヴ グ ズ ヅ <NA> ブ <NA> <NA> <NA> <NA> <NA>
## 9 <NA> ゲ ゼ デ <NA> ベ <NA> <NA> <NA> <NA> <NA>
## 10 <NA> ゴ ゾ ド <NA> ボ <NA> <NA> <NA> <NA> <NA>
## 11 ァ <NA> <NA> <NA> <NA> パ <NA> ャ <NA> <NA> <NA>
## 12 ィ <NA> <NA> <NA> <NA> ピ <NA> ュ <NA> <NA> <NA>
## 13 ゥ <NA> <NA> ッ <NA> プ <NA> ョ <NA> <NA> <NA>
## 14 ェ <NA> <NA> <NA> <NA> ペ <NA> <NA> <NA> <NA> <NA>
## 15 ォ <NA> <NA> <NA> <NA> ポ <NA> <NA> <NA> ン <NA>
han_kana %>%
dplyr::mutate_all(funs(stringi::stri_trans_nfkc))
## # A tibble: 15 x 11
## ア行 カ行 サ行 タ行 ナ行 ハ行 マ行 ヤ行 ラ行 ワ行 その他
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 ア カ サ タ ナ ハ マ ヤ ラ ワ ゙
## 2 イ キ シ チ ニ ヒ ミ ユ リ <NA> ゚
## 3 ウ ク ス ツ ヌ フ ム ヨ ル <NA> ー
## 4 エ ケ セ テ ネ ヘ メ <NA> レ <NA> 。
## 5 オ コ ソ ト ノ ホ モ <NA> ロ ヲ 、
## 6 <NA> ガ ザ ダ <NA> バ <NA> <NA> <NA> <NA> 「
## 7 <NA> ギ ジ ヂ <NA> ビ <NA> <NA> <NA> <NA> 」
## 8 ヴ グ ズ ヅ <NA> ブ <NA> <NA> <NA> <NA> <NA>
## 9 <NA> ゲ ゼ デ <NA> ベ <NA> <NA> <NA> <NA> <NA>
## 10 <NA> ゴ ゾ ド <NA> ボ <NA> <NA> <NA> <NA> <NA>
## 11 ァ <NA> <NA> <NA> <NA> パ <NA> ャ <NA> <NA> <NA>
## 12 ィ <NA> <NA> <NA> <NA> ピ <NA> ュ <NA> <NA> <NA>
## 13 ゥ <NA> <NA> ッ <NA> プ <NA> ョ <NA> <NA> <NA>
## 14 ェ <NA> <NA> <NA> <NA> ペ <NA> <NA> <NA> <NA> <NA>
## 15 ォ <NA> <NA> <NA> <NA> ポ <NA> <NA> <NA> ン <NA>