텍스트 데이터의 전처리 과정 중 패턴 일치되는 문자열에 대해서 다른 문자열로 대체하거나 제거, 혹은 결합한다.

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

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

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

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

Arguments

doc

character. 문자열 대체/제거/결합/분리를 수행할 문자열 벡터

chunk

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

mc.cores

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

verbos

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

Value

character. 문자열 대체/제거/결합이 수행된 문자열 벡터.

Details

Windows 운영체제에서는 병력작업이 지원되지 않기 때문에, 사용자의 설정과는 무관하게 mc.cores의 값이 1로 적용됩니다.

Examples

# \donttest{
##======================================================
## 문자열 대체
##======================================================

# 문자열 대체 메타 신규 등록
meta_path <- system.file("meta", package = "bitNLP")
fname <- glue::glue("{meta_path}/preparation_replace.csv")
set_meta("replace", fname, fileEncoding = "utf8")

# 등록된 문자열 대체 룰 확인하기
get_meta("replace")
#>        rule_nm    rule_class
#> 1  다중 구두점   구두점 대체
#> 2         남편 유사단어 대체
#> 3   베이비시터 유사단어 대체
#> 4     텔레비전 유사단어 대체
#> 5         CCTV 유사단어 대체
#> 6       할머니 유사단어 대체
#> 7       어머니 유사단어 대체
#> 8       아버지 유사단어 대체
#> 9         아들 유사단어 대체
#> 10          딸 유사단어 대체
#> 11      화이팅 유사단어 대체
#> 12      모유량 유사단어 대체
#> 13        베개 유사단어 대체
#> 14        초산 유사단어 대체
#> 15        급여 유사단어 대체
#>                                                   pattern    replace  use
#> 1                                               (\\.){2,}        \\. TRUE
#> 2                                               신랑|남편       남편 TRUE
#> 3  베비시터|((육아|아이|아기)[[:space:]]*(도우미|돌보미)) 베이비시터 TRUE
#> 4                          TV|테레비|티브이|텔레비젼|티비   텔레비전 TRUE
#> 5           (CC|cc|씨씨)[[:space:]]?(텔레비전|티비|tv|TV)       CCTV TRUE
#> 6                                     할(미|머님|무니|매)     할머니 TRUE
#> 7                                 엄마|어머님|엄니|어무니     어머니 TRUE
#> 8                                      아버님|아빠|아부지     아버지 TRUE
#> 9                              아들(래미|아이|애|내미|램)       아들 TRUE
#> 10                               딸(래미|아이|애|내미|램)         딸 TRUE
#> 11                                     파이팅|홧팅|퐈이팅     화이팅 TRUE
#> 12                                모유[[:space:]]?[양|량]     모유량 TRUE
#> 13                                           [베배][게개]       베개 TRUE
#> 14                              (첫|처음)[[:space:]]*출산       초산 TRUE
#> 15                                              월급|봉급       급여 TRUE

doc_content <- buzz[, "CONTENT"]

# 문자열 대체, verbos = FALSE, chunk = 200
doc_content_after <- replace_text(doc_content, verbos = FALSE, chunk = 200)

# 문자열 대체, chunk = 500, mc.cores = 8
doc_content_after <- replace_text(doc_content, chunk = 500, mc.cores = 8)
#> ── Replace: [구두점 대체] - 다중 구두점 ───────────────────────────────── 2건 ──
#> ── Replace: [유사단어 대체] - CCTV ────────────────────────────────────── 3건 ──
#> ── Replace: [유사단어 대체] - 급여 ────────────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 남편 ──────────────────────────────────── 323건 ──
#> ── Replace: [유사단어 대체] - 딸 ──────────────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 모유량 ──────────────────────────────────── 1건 ──
#> ── Replace: [유사단어 대체] - 베개 ────────────────────────────────────── 5건 ──
#> ── Replace: [유사단어 대체] - 베이비시터 ──────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 아들 ────────────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 아버지 ──────────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 어머니 ──────────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 초산 ────────────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 텔레비전 ────────────────────────────────── 3건 ──
#> ── Replace: [유사단어 대체] - 할머니 ──────────────────────────────────── 0건 ──
#> ── Replace: [유사단어 대체] - 화이팅 ──────────────────────────────────── 0건 ──
# }
# \donttest{
##======================================================
## 문자열 결합
##======================================================

# 문자열 결합 메타 신규 등록
meta_path <- system.file("meta", package = "bitNLP")
fname <- glue::glue("{meta_path}/preparation_concat.csv")
set_meta("concat", fname, fileEncoding = "utf8")

# 등록된 문자열 결합 룰 확인하기
get_meta("concat")
#>                 rule_nm                pattern    replace  use
#> 1 (하원도우미) 붙여쓰기 하원[[:space:]]+도우미 하원도우미 TRUE
#> 2 (가사도우미) 붙여쓰기 가사[[:space:]]+도우미 가사도우미 TRUE
#> 3 (산후도우미) 붙여쓰기 산후[[:space:]]+도우미 산후도우미 TRUE
#> 4 (친정어머니) 붙여쓰기 친정[[:space:]]+어머니 친정어머니 TRUE
#> 5 (베이비시터) 붙여쓰기 베이비[[:space:]]+시터 베이비시터 TRUE
#> 6   (연말정산) 붙여쓰기   연말[[:space:]]+정산   연말정산 TRUE
#> 7   (출산휴가) 붙여쓰기   출산[[:space:]]+휴가   출산휴가 TRUE
#> 8   (시어머니) 붙여쓰기   시[[:space:]]+어머니   시어머니 TRUE
#> 9   (육아휴직) 붙여쓰기   육아[[:space:]]+휴직   육아휴직 TRUE

doc_content <- buzz[, "CONTENT"]

## verbos = FALSE, chunk = 200
doc_content_after <- concat_text(doc_content, verbos = FALSE, chunk = 200)

## chunk = 500, mc.cores = 8
doc_content_after <- concat_text(doc_content, chunk = 500, mc.cores = 8)
#> ── Concat: (가사도우미) 붙여쓰기 ─────────────────────────────────────── 22건 ──
#> ── Concat: (베이비시터) 붙여쓰기 ──────────────────────────────────────── 1건 ──
#> ── Concat: (산후도우미) 붙여쓰기 ──────────────────────────────────────── 1건 ──
#> ── Concat: (시어머니) 붙여쓰기 ────────────────────────────────────────── 1건 ──
#> ── Concat: (연말정산) 붙여쓰기 ────────────────────────────────────────── 1건 ──
#> ── Concat: (육아휴직) 붙여쓰기 ────────────────────────────────────────── 2건 ──
#> ── Concat: (출산휴가) 붙여쓰기 ────────────────────────────────────────── 1건 ──
#> ── Concat: (친정어머니) 붙여쓰기 ──────────────────────────────────────── 5건 ──
#> ── Concat: (하원도우미) 붙여쓰기 ──────────────────────────────────────── 1건 ──
# }
# \donttest{
##======================================================
## 문자열 분리
##======================================================

# 문자열 분리 메타 신규 등록
meta_path <- system.file("meta", package = "bitNLP")
fname <- glue::glue("{meta_path}/preparation_split.csv")
set_meta("split", fname, fileEncoding = "utf8")

# 등록된 문자열 분리 룰 확인하기
get_meta("split")
#>                  rule_nm
#> 1 (도우미) 유형 띄어쓰기
#>                                                    pattern replace  use
#> 1 (하원|등하원|등원|입주|교포|가사|산후|보육|산모)(도우미) \\1 \\2 TRUE

doc_content <- buzz[, "CONTENT"]

# 문자열 분리, verbos = FALSE, chunk = 200
doc_content_after <- split_text(doc_content, verbos = FALSE, chunk = 200)

# 문자열 분리, chunk = 500, mc.cores = 8
doc_content_after <- split_text(doc_content, chunk = 500, mc.cores = 8)
#> ── Split: (도우미) 유형 띄어쓰기 ──────────────────────────────────────── 6건 ──
# }
# \donttest{
##======================================================
## 문자열 제거
##======================================================

# 문자열 제거 메타 신규 등록
meta_path <- system.file("meta", package = "bitNLP")
fname <- glue::glue("{meta_path}/preparation_remove.csv")
set_meta("remove", fname, fileEncoding = "utf8")
#> Warning: incomplete final line found by readTableHeader on '/private/var/folders/zy/rmhmyp4n0fd1_t0q9y_dy0hm0000gn/T/RtmpNpmHK3/temp_libpathafc2326a2f65/bitNLP/meta/preparation_remove.csv'

# 등록된 문자열 제거 룰 확인하기
get_meta("remove")
#>           rule_nm                                         pattern  use
#> 1 카페 안내문구 1 게시판[[:space:]]*이용전[[:print:]]*이동됩니다. TRUE
#> 2 카페 안내문구 2                  카페이용 전[[:print:]]*참고\\) TRUE
#> 3 카페 안내문구 3                 게시글 작성[[:print:]]*35756864 TRUE
#> 4 카페 안내문구 4             흥부야[[:print:]]*기타 하고 싶은 말 TRUE
#> 5        URL 문구   (http|www)([a-zA-Z0-9\\>\\/\\.\\:\\=\\&\\_])* TRUE

doc_content <- buzz[, "CONTENT"]

## verbos = FALSE, chunk = 800
doc_content_after <- remove_text(doc_content, verbos = FALSE, chunk = 800)

## chunk = 500, mc.cores = 8
doc_content_after <- remove_text(doc_content, chunk = 500, mc.cores = 8)
#> ── Removes: URL 문구 ─────────────────────────────────────────────────── 40건 ──
#> ── Removes: 카페 안내문구 1 ──────────────────────────────────────────── 33건 ──
#> ── Removes: 카페 안내문구 2 ───────────────────────────────────────────── 9건 ──
#> ── Removes: 카페 안내문구 3 ──────────────────────────────────────────── 47건 ──
#> ── Removes: 카페 안내문구 4 ──────────────────────────────────────────── 16건 ──
# }