はじめに
文字列処理・テキスト処理とは、プログラミングを行うなかで、文字列・テキストに対する色々な操作のことを指します。それら処理をうまく使いこなすことで、文字列を自由に処理できるようになります。文字列処理の活用事例は、キーワード抽出、テキスト分類、テキストマイニングの前処理など、多岐に渡ります。 今回の「Rでの文字列処理」シリーズで扱う、文字列処理のライブラリ・関数群やプログラムコードは、R環境上で無料で提供されている、オープン・ソフトウェアを用います。
この記事では、R言語での文字列の抽出/切り出しや検出について、いろいろと試してまとめてみました。主に、baseやstringrのパッケージを扱っています。
テキスト処理の関連記事
関連パッケージをロードする
library(stringr) library(readr)
文字列の抽出/切り出しについて
stringr::str_extract
関数、stringr::str_extract_all
関数では、
文字列から一致するパターンを抽出して、ベクトルで結果を返す。
str_extractとstr_extract_allとで、少し挙動が違うみたいである。
以下に、テストデータでの実行例を示す。
#テストデータの読み込んで、unlistにする Dat <- unlist(data.frame(readr::read_tsv(file="https://raw.githubusercontent.com/kumeS/Blog/master/TXT_proc/test.txt", col_names=F, show_col_types = FALSE)), use.names = F) #最初の部分を表示する Dat #[1] "abc ABC abc" "ABC abc ABC" "def DEF def" "DEF def DEF" "abc.ABC.abc" #[6] "ABC.abc.ABC" #abcが含まれる部分を要素ごとに抽出する stringr::str_extract(string=Dat, pattern="abc") #[1] "abc" "abc" NA NA "abc" "abc" #abcが含まれる部分をすべて抽出する stringr::str_extract_all(string=Dat, pattern="abc") #[[1]] #[1] "abc" "abc" # #[[2]] #[1] "abc" # #[[3]] #character(0) # #[[4]] #character(0) # #[[5]] #[1] "abc" "abc" # #[[6]] #[1] "abc"
文字数指定で、文字列を抽出する
base::substr
あるいはstringr::str_sub
を使って、
文字ベクトルの部分文字列を文字数指定で抽出する。
#任意の文字列 Moji <- "abcdefghij" #文字数のカウント nchar(Moji) #[1] 10 #substr関数で、1から3文字目までを抽出する base::substr(Moji, start=1, stop=3) #[1] "abc" #substr関数で、4から6文字目までを抽出する base::substr(Moji, start=4, stop=6) #[1] "def" #次に、str_sub関数で、1から3文字目までを抽出する stringr::str_sub(Moji, start=1, end=3) #[1] "abc" #str_sub関数で、4から6文字目までを抽出する stringr::str_sub(Moji, start=4, end=6) #[1] "def" #str_sub関数で、1文字目から、後ろから3文字目までを抽出する stringr::str_sub(Moji, start=1, end=-3) #[1] "abcdefgh" #str_sub関数で、4文字目から最後の文字までを抽出する stringr::str_sub(Moji, start=4, end=-1) #[1] "defghij"
stringr::str_sub
関数では、
マイナス付きで、startあるいはendを指定すると、
後ろから何文字目かを指定できる。
文字列の検出
stringr::str_detect
関数は、
文字列の中のパターンの有無を検出する。
#そのパターンが含まれるかどうかを、TRUE/FALSEで返す stringr::str_detect(string=Dat, pattern="abc") #[1] TRUE TRUE FALSE FALSE TRUE TRUE #パターンが含まれた場合には、FALSEで返す (negate = TRUE) stringr::str_detect(string=Dat, pattern="abc", negate = TRUE) #[1] FALSE FALSE TRUE TRUE FALSE FALSE
「月の英語表記」を「月の数字」に置換する方法について
#月の英語表記を月の数字に変換するTips Month <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") #数字に変換 match(Month, month.abb) #[1] 1 2 3 4 5 6 7 8 9 10 11 12 #数字に変換: 桁数を合わせる formatC(match(Month, month.abb), width = 2, flag = "0") #[1] "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12"
参考資料
https://www.it-swarm.jp.net/ja/r/%E3%83%94%E3%83%AA%E3%82%AA%E3%83%89%E3%81%A7strsplit%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/1048748448/www.it-swarm.jp.net