Skip to content

Rapidly Apply Basic But Impactful Text string utilities

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md
Notifications You must be signed in to change notification settings

syunsuke/rabbit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rabbit

Rabbit is Rapidly Apply Basic But Impactful Text string utilities.

Rabbitは、 Rでのプログラミングで使える 簡単で便利な文字列操作などの関数を集めたパッケージです。

Installation

You can install the development version of rabbit from GitHub with:

インストールは以下の通り。

# install.packages("devtools")
devtools::install_github("syunsuke/rabbit")

文字列から日付を読み取る

fetch_date_from_string()関数は、 文字列に含まれる日付から日付オブジェクトを生成します。 主に、和暦(元号での表記)が含まれている場合に役立ちます。

library(rabbit)
fetch_date_from_string("この文書は平成11年2月3日に書かれました。")
#> [1] "1999-02-03"

文字列に含まれる何年何月までのものは1日を指すようにします。

fetch_date_from_string("私は昭和43年7月生まれです。")
#> [1] "1968-07-01"

注意

文字列の中に複数日付文字列がある場合には、1つ目の日付のみが返ります。 また、日付に類似する部分が混在すると、その部分を認識してしまうことがあります。 関数に渡す文字列は、事前に日付を表すと思われる部分に絞って渡すと混乱がなくなります。

日本語のリテラル表記をエスケープされたユニコードにする

変換の必要性

Rのコードの約束事として、 ソースコードはASCIIコードを使用することとなっています。 実際には、ASCIIコード以外で、日本後の文字等をリテラル表記をしても 動作しますが、パッケージのcheck()関数ではwarnningが出たり、 CRANに登録する際には、この約束事を守る必要があります。

エスケープされたユニコードでの表示とは、以下のようなものです。

リテラル ユニコード
\u732b

実際の日本語リテラルの入っているコードは以下のようなものです。

    stringr::str_extract("[0-9]{4}年[0-9]+月[0-9]+日")

実際の日本語リテラルを使わずASCIIコードで表現したものは以下のようになります。

    #stringr::str_extract("[0-9]{4}年[0-9]+月[0-9]+日")
    stringr::str_extract("[0-9]{4}\u5e74[0-9]+\u6708[0-9]+\u65e5")

注意

この処理のアイディアは、 【R】 日本語を含むコードを丸ごとエスケープさせる方法 で紹介されていた方法を基礎にしています。 既存のエスケープ関数を利用してトリッキーに変換を行っているので、 複雑にエスケープされたエスケープ文字等が混在すると、 思いもよらない変換が起こる可能性があります。 なるべく、日本語リテラルをASCIIに変換するという目の届く範囲での運用を想定し、 ファイル全体を自動で書き換える等の運用は想定していません(何が起こるかわからない)。

基本的な使い方

jp2unicode()関数は、この変換を行ってくれます。

target <- 'stringr::str_extract("[0-9]{4}年[0-9]+月[0-9]+日")'
jp2unicode(target)
#> [1] "stringr::str_extract(\"[0-9]{4}\\u5e74[0-9]+\\u6708[0-9]+\\u65e5\")"

Rの場合、文字列の値を表現するとエスケープ文字が入ってしまいます。 ですから、実際のコードに表記する場合は次のように’message()’関数で、 標準出力等に表示させます。

target <- 'stringr::str_extract("[0-9]{4}年[0-9]+月[0-9]+日")'
jp2unicode(target) %>% message()
#> stringr::str_extract("[0-9]{4}\u5e74[0-9]+\u6708[0-9]+\u65e5")

これを該当するコードの部分にコピー&ペーストすることで、 日本語リテラルをASCIIコードのみで表現できるようになります。

クリップボードを使った便利な方法

jp2uni_clip_convert()関数は、 クリップボード内の文字列を変換してくれます。

なので、ソースコードの変換したい行をコピーして クリップボードにある状態で、 コンソール等でjp2uni_clip_convert()関数を実行し、 それから何処かへペーストすると、変換された文字列がペーストされます。

実用的にはこれが一番使いやすいと思います。

ファイルを受け取る方法

jp2unicode()関数は、文字列のベクトルを受け取ります。 ですから、ファイルをreadLines()関数で受け取って、 それをjp2unicode()に渡すことで、全文の変換も行えます。

以下は、ソースコードの一部を変換するサンプルです。

file_path <- "R/jc2ad.R"

readLines(file_path) %>%  .[46:53] %>% 
  jp2unicode() %>%
  paste(collapse = "\n") %>% 
  message()
#>   #reiwa2ad <- sub_jc2ad_strconv_func("令和",2019)
#>   reiwa2ad <- sub_jc2ad_strconv_func("\u4ee4\u548c",2019)
#> 
#>   #heisei2ad <- sub_jc2ad_strconv_func("平成",1989)
#>   heisei2ad <- sub_jc2ad_strconv_func("\u5e73\u6210",1989)
#> 
#>   #syouwa2ad <- sub_jc2ad_strconv_func("昭和",1926)
#>   syouwa2ad <- sub_jc2ad_strconv_func("\u662d\u548c",1926)

出力をファイルにすることも出来ます。

file_path <- "R/jc2ad.R"

readLines(file_path) %>% 
  jp2unicode() %>%
  writeLines("devwork/jc2ad_ascii.R")

About

Rapidly Apply Basic But Impactful Text string utilities

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages