Tuesday, July 10, 2018

Rcode trích diện tích từ đoạn text


load_pkg <- function(pkg){
  library(pkg, character.only = T)
  return('NNB')
}

pkgs <- c('tidyverse','magrittr', 'stringr', 'stringi', 'readxl', 'writexl', 'tidytext')
sapply(pkgs, load_pkg)

my_path <- 'D:/dt_crawled/'

d3 <- read_excel(paste0(my_path, 'Muaban_All_20June2018.xlsx'), sheet = 3)

head(d3$mb_long)

# Lấy dữ liệu
d3 <- d3 %>% mutate(text_vector = mb_long %>%
                      as_vector() %>%
                      str_to_lower() %>% # Chuyển về chữ in thường
                      str_squish() %>%  # Xóa khoảng trống thừa giữa các ký tự
                      stri_trans_general(id = 'Latin-ASCII') # Xóa dấu của chữ
                    )

# -------------------------------
## Khoanh vùng liên quan đến m2
# -------------------------------
f1_dt <- function(text_vector){
  ## Tạo mẫu regrex
  match_m2 <- c("[:digit:]+\\s*m2", # vd:30m2, 30 m2
                  "[:digit:]+(\\.|,|x)[:digit:]+\\s*m2", # vd: 30.06m2, 30x06m2, 30,06m2
                  "[:digit:]+\\s*x\\s*[:digit:]+\\s*m2"# # vd: 30 x 9 m2
                  ) %>% paste0(collapse = '|')
   
  ## Xuất dữ liệu
    out <- text_vector %>% as_vector() %>%
      str_extract_all(pattern = match_m2, simplify = T)
 
  }
# -------------------------------
# Khoanh vùng liên quan đến dt hoặc diện tích
# -------------------------------
f2_dt <- function(x){
  ## Tạo mẫu regrex
  match_dt <- c("dt\\s*:\\s*\\d+\\s*x\\s*\\d+", # vd: dt: 3 x 5
                "dt\\s*:\\s*\\d+(\\.|,)\\d+\\s*x\\s*\\d+(\\.|,)\\d+" , # vd: dt: 3.4 x 5.6,
                "dt\\s*:\\s*\\d+\\s*x\\s*\\d+(\\.|,)?\\d*", #, # vd: dt: 3 x 5.6,
                "dt\\s*:\\s*\\d+(\\.|,)?\\d*\\s*x\\s*\\d+", #, # vd: dt: 3.4 x 5,
               
                "dien\\s*tich\\s*:\\s*\\d+\\s*x\\s*\\d+", # vd: dt: 3 x 5
                "dien\\s*tich\\s*:\\s*\\d+(\\.|,)\\d+\\s*x\\s*\\d+(\\.|,)\\d+" , # vd: dt: 3.4 x 5.6,
                "dien\\s*tich\\s*:\\s*\\d+\\s*x\\s*\\d+(\\.|,)?\\d*", #, # vd: dt: 3 x 5.6,
                "dien\\s*tich\\s*:\\s*\\d+(\\.|,)?\\d*\\s*x\\s*\\d+" #, # vd: dt: 3.4 x 5,
                ) %>% paste0(collapse = '|')
 
  ## Xuất dữ liệu
  out <- text_vector %>% as_vector() %>%
    str_extract_all(pattern = match_dt, simplify = T)

}



m2 <- d3 %>%
  filter(str_detect(text_vector, 'm2') == T) %>%
  select(text_vector)

non_m2 <- d3 %>%
  filter(str_detect(text_vector, 'm2') == F) %>%
  select(text_vector)

m2 <- f1_dt(m2)

non_m2 <- f2_dt(non_m2)





No comments:

Post a Comment