filter_text.Rd
텍스트 데이터의 전처리 과정 중 패턴 일치되는 문자열이 있는 데이터를 취하거나 제거한다.
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
)
character. 문자열 필터링을 수행할 문자열 벡터
logical. 반환값을 논리벡터로 반환할지의 여부. 기본값 TRUE이면 추출한 대상을 의미하는 논리값을 반환하고, FALSE이면 대상을 추출한 문자열 벡터를 반환. tidytext 패키지를 사용할 경우에는 기본값인 TRUE를 사용하면 됨
integer. 병렬 작업 수행 시 처리 단위인 chunk
integer. 병렬 작업 수행 시 사용할 코어의 개수
logical. 메타의 Rule 당 처리된 건수를 화면에 출력할 지의 여부
character. 문자열 필터링이 수행된 문자열 벡터.
# \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
# }