텍스트 데이터의 전처리 과정 중 패턴 일치되는 문자열이 있는 데이터를 취하거나 제거한다.

filter_text(
  doc,
  as_logical = TRUE,
  chunk = round(length(if (tibble::is_tibble(doc)) dplyr::pull(doc) else doc)/mc.cores),
  mc.cores = parallel::detectCores(),
  verbos = TRUE
)

Arguments

doc

character. 문자열 필터링을 수행할 문자열 벡터

as_logical

logical. 반환값을 논리벡터로 반환할지의 여부. 기본값 TRUE이면 추출한 대상을 의미하는 논리값을 반환하고, FALSE이면 대상을 추출한 문자열 벡터를 반환. tidytext 패키지를 사용할 경우에는 기본값인 TRUE를 사용하면 됨

chunk

integer. 병렬 작업 수행 시 처리 단위인 chunk

mc.cores

integer. 병렬 작업 수행 시 사용할 코어의 개수

verbos

logical. 메타의 Rule 당 처리된 건수를 화면에 출력할 지의 여부

Value

character. 문자열 필터링이 수행된 문자열 벡터.

Examples

# \donttest{
##======================================================
## 문자열 매치 데이터 필터링
##======================================================

# 매치 데이터 필터링 메타 신규 등록
meta_path <- system.file("meta", package = "bitTA")
fname <- glue::glue("{meta_path}/preparation_filter.csv")
set_meta("filter", fname, fileEncoding = "utf8")

# 등록된 필터링 룰 확인하기
get_meta("filter")
#>    rule_nm
#> 1 신문기사
#> 2 제품홍보
#> 3 설문조사
#> 4     출처
#> 5   이벤트
#> 6     방송
#>                                                                                     pattern
#> 1                                   (팍스넷|파이낸셜|연합|(PT)|오마이|경제)[[:space:]]*뉴스
#> 2 ((입법|정치|교육)[[:space:]]*플랫폼)|맘마미아[[:space:]]*가계부[[:print:]]*인증샷|Playtex
#> 3                                                              좌담회|구글설문|채용대행업체
#> 4                                                    출처[[:space:]]*:|문의처보건복지콜센터
#> 5                                     (증정|기념)이벤트|허니스크린|이벤트를[[:space:]]*진행
#> 6                                 제작진|기억저장소|추모카페|블랙홀|푸드스튜디오|연금정보넷
#>   accept  use
#> 1  FALSE TRUE
#> 2  FALSE TRUE
#> 3  FALSE TRUE
#> 4  FALSE TRUE
#> 5  FALSE TRUE
#> 6  FALSE TRUE

doc_content <- buzz[, "CONTENT"]

# 필터링, verbos = FALSE, chunk = 200
doc_after_logical <- filter_text(doc_content, verbos = FALSE, chunk = 200)

# 필터링, as_logical = FALSE,  mc.cores = 8, 
doc_after_character <- filter_text(doc_content, as_logical = FALSE, mc.cores = 8)
#> ── rejects: 방송 ──────────────────────────────────────────────────────── 3건 ──
#> ── rejects: 설문조사 ──────────────────────────────────────────────────── 1건 ──
#> ── rejects: 신문기사 ──────────────────────────────────────────────────── 1건 ──
#> ── rejects: 이벤트 ────────────────────────────────────────────────────── 1건 ──
#> ── rejects: 제품홍보 ──────────────────────────────────────────────────── 2건 ──
#> ── rejects: 출처 ──────────────────────────────────────────────────────── 2건 ──
#> ── Missing Check: Removing NA ─────────────────────────────────────────── 5건 ──

# 필터링 전/후 비교
NROW(doc_content)
#> [1] 1000
sum(doc_after_logical)
#> [1] 985
NROW(doc_after_character)
#> [1] 985

# tidyverse(혹은 tidytext)와의 협업
library(dplyr)
buzz %>% 
  filter(filter_text(CONTENT, verbos = FALSE)) %>% 
  select(KEYWORD, SRC, CONTENT)
#> # A tibble: 985 × 3
#>    KEYWORD SRC              CONTENT                                             
#>    <chr>   <chr>            <chr>                                               
#>  1 맞벌이  17,18년 베이비맘 "지금 둘째 임신중인 어머니예요 첫째는 16년 1월생 둘…
#>  2 맞벌이  20대 수다방      "저희 부부는 맞벌이인데요 남편 회사 사람들도 거의 … 
#>  3 맞벌이  20대 수다방      "신랑지출 제지출 구분해서 따로적으시나요 제가쓴돈은…
#>  4 맞벌이  20대 수다방      "너무 고민이 되서 하소연 할때 없어서 여기서 하소연 …
#>  5 맞벌이  20대 수다방      "\"이제 벌써 결혼 1년차 가까이 되어가는 동갑내기신… 
#>  6 맞벌이  20대 수다방      "자가는 아니고 신랑 직장때문에 집 팔고 세들어 살고 …
#>  7 맞벌이  20대 수다방      "계획했던 임신이 아니라서 급하게 맞벌이 (주말부부)… 
#>  8 맞벌이  20대 수다방      "못가지니까 기분이 안좋아요 다른것도아니고 여유가 … 
#>  9 맞벌이  20대 수다방      "남편이랑 저랑 동갑에 둘 다 맞벌이에요. 저는 현재 … 
#> 10 맞벌이  20대 수다방      "요즘 퇴근하고 남편이 데리러 오는데요 살빼려고 하는…
#> # … with 975 more rows
# }