日本語特有の処理
Text Update: 11/10, 2018 (JST)

日本語を含むデータを処理する場合正規表現だけでは処理できない場合があります。このような場合には日本語処理に特化した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>

 


CC BY-NC-SA 4.0 , Sampo Suzuki