全角→半角変換(準備)
サンプルとして文字やアルファベット、記号を含むデータフレームを用意しました。
library(tidyverse)
setwd("/Users/name/DATAS/")
data_01 <- read.csv("test_200208.csv", header = T)
data_01
id text01 text02
1 1 あいうえお かきくけこ
2 2 アイウエオ カキクケコ
3 3 ABCDE FGHIJ
4 4 abcde fghij
5 5 記号! " # $記号 記 , - . /号
わかりにくいかもしれませんが、アルファベットは全角です
データの型を確認します。
class(data_01)
[1] "data.frame"
str(data_01)
'data.frame': 5 obs. of 3 variables:
$ id : int 1 2 3 4 5
$ text01: chr "あいうえお" "アイウエオ" "ABCDE" "abcde" ...
$ text02: chr "かきくけこ" "カキクケコ" "FGHIJ" "fghij" ...
全角→半角変換(stri_trans_general:実行)
「stringi」パッケージの「stri_trans_general」関数を使ってみます。
library(stringi)
data_02 <- data_01 %>%
mutate(
text01_b = stri_trans_general(text01 , "Fullwidth-Halfwidth"),
text02_b = stri_trans_general(text02 , "Fullwidth-Halfwidth")
)
data_02
id text01 text02 text01_b text02_b
1 1 あいうえお かきくけこ あいうえお かきくけこ
2 2 アイウエオ カキクケコ アイウエオ カキクケコ
3 3 ABCDE FGHIJ ABCDE FGHIJ
4 4 abcde fghij abcde fghij
5 5 記号! " # $記号 記 , - . /号 記号! " # $記号 記 , - . /号
アルファベットとカタカナが半角になります。
(参考)
全角→半角変換(halfwidthr:準備)
「halfwidthr」というパッケージも試してみました。
インストールするためには、「devtools」パッケージが必要です。
install.packages("devtools")
trying URL 'https://mirror.las.iastate.edu/CRAN/bin/macosx/big-sur-arm64/contrib/4.1/devtools_2.4.4.tgz'
Content type 'application/x-gzip' length 422640 bytes (412 KB)
==================================================
downloaded 412 KB
うまくインストールできていないので、上記メッセージの「trying URL」でtgzファイルをダンロードし、tgzを直接指定してインストールします。
download.file(
"https://mirror.las.iastate.edu/CRAN/bin/macosx/big-sur-arm64/contrib/4.1/devtools_2.4.4.tgz",
"devtools"
)
install.packages("devtools", repos = NULL, type = "source")
library(devtools)
「halfwidthr」をインストールします。
install_github("yutannihilation/halfwidthr")
library(halfwidthr)
(参考)
全角→半角変換(halfwidthr:実行)
「halfwidthr」では、カタカナは全角のままです。
data_02_2 <- data_01 %>%
mutate(
text01_c = halfwidthen(text01),
text02_c = halfwidthen(text02)
)
data_02_2
id text01 text02 text01_c text02_c
1 1 あいうえお かきくけこ あいうえお かきくけこ
2 2 アイウエオ カキクケコ アイウエオ カキクケコ
3 3 ABCDE FGHIJ ABCDE FGHIJ
4 4 abcde fghij abcde fghij
5 5 記号! " # $記号 記 , - . /号 記号! " # $記号 記 , - . /号
記号削除・置換(gsub)
形態素解析をかける場合は、記号置換は削除しています。
R標準の「gsub」を「lapply」を使ってデータフレームに適用することで削除します。
lapply」は第1引数にデータ(オブジェクト)、第2引数に関数を指定でき、返り値はリストです。
data_03 <- data_02_2
data_03[,4:5] <-
lapply(data_03[,3:4] , gsub,, pattern="\\W", replacement = "")
data_03
id text01 text02 text01_c text02_c
1 1 あいうえお かきくけこ かきくけこ あいうえお
2 2 アイウエオ カキクケコ カキクケコ アイウエオ
3 3 ABCDE FGHIJ FGHIJ ABCDE
4 4 abcde fghij fghij abcde
5 5 記号! " # $記号 記 , - . /号 記号 記号記号
data_03[5,4:5]
text01_c text02_c
5 記号 記号記号
記号が削除され、 「mutate」で作成した「text01_c」 「text02_c」列にそれぞれ「記号」「記号記号」が入っています。
(参考)
記号削除・置換(str_replace_all)
「stringr」パッケージの「str_replace_all」関数を使ってみます。
data_03_b <- data_02_2
data_03_c <-
data_03_b %>%
mutate(text01_c = (str_replace_all(text01_c, pattern="\\W", replacement="")),
text02_c = (str_replace_all(text02_c, pattern="\\W", replacement=""))
)
data_03_c
id text01 text02 text01_c text02_c
1 1 あいうえお かきくけこ あいうえお かきくけこ
2 2 アイウエオ カキクケコ アイウエオ カキクケコ
3 3 ABCDE FGHIJ ABCDE FGHIJ
4 4 abcde fghij abcde fghij
5 5 記号! " # $記号 記 , - . /号 記号記号 記号
data_03_c[5,4:5]
text01_c text02_c
5 記号記号 記号
(参考)
大文字小文字変換(str_to_lower)
アルファベットを大文字、小文字に返還する場合は、「stringr」パッケージの「str_to_lower」関数を使います。
大文字にする場合は「str_to_upper]を使用します。
data_04 <- data_02_2
data_04_b <-
data_04 %>%
mutate(text01_c = str_to_lower(text01_c),
text02_c = str_to_lower(text02_c)
)
(参考)
複数ファイル読み込み(list.files)
上記などの処理をする前に、データが複数ファイルに分かれている場合、まとめてインポートすることがあります。
データは同じフォーマット(列数と名称が一致)にし、同じディレクトリに集めます。
パスを読み込み、そのパスを「read_csv」に適用しています。
library(readr)
texts_path <- list.files(path = "/Users/user/ファイルが入っているディレクトリ/", pattern = "*.csv", full.names = T)
head(texts_path)
[1] "/Users/user/ファイルが入っているディレクトリ//aaa.csv"
[2] "/Users/user/ファイルが入っているディレクトリ//bbb.csv"
[3] "/Users/user/ファイルが入っているディレクトリ//ccc.csv"
#(略)
# 「sapply」:引き数でデータ(オブジェクト)と関数を渡すと、データの各要素ごとに関数を適用
# col_types = cols(.default = "c") ですべての列を文字列型に
texts <- sapply(texts_path, read_csv, simplify=FALSE, col_types = cols(.default = "c"))
「chartr」で全角半角変換
コメントで教えてもらった「chartr」を使用したので追記します。
chartr(z, y, x)
文字列「x」を対象に、「z」を「y」に置換
chartr("A", "a", "ABC")
[1] "aBC"
関数を設定し、「sapply」で変換を実行します。
data_01
id text01 text02
1 1 あいうえお かきくけこ
2 2 アイウエオ カキクケコ
3 3 ABCDE FGHIJ
4 4 abcde fghij
5 5 記号! " # $記号 記 , - . /号
#関数
data_chartr <- function(x) {
y <- chartr("[A-Za-z0-9]", "[A-Za-z0-9]", x)
return(y)
}
#sapplyでデータフレームに適用
data_ch1 <- sapply(data_01, data_chartr) %>% as.data.frame()
data_ch1
id text01 text02
1 1 あいうえお かきくけこ
2 2 アイウエオ カキクケコ
3 3 ABCDE FGHIJ
4 4 abcde fghij
5 5 記号! " # $記号 記 , - . /号
#sapplyと合わせて関数を設定する方法
data_chtr_1 <- sapply(data_01, function(x) {chartr("[A-Za-z0-9]", "[A-Za-z0-9]", x)}) %>% as.data.frame()
data_chtr_1
id text01 text02
1 1 あいうえお かきくけこ
2 2 アイウエオ カキクケコ
3 3 ABCDE FGHIJ
4 4 abcde fghij
5 5 記号! " # $記号 記 , - . /号
了