HashRegexAlgorithm - 대량패턴비교 맷칭 아직 설계단계 알고리즘

1 minute read

10가지 패턴의 파일집단이 들어온다고 가정

자료종류 파일이름 파일설명 데이터 전송 FCT(예보) FCT_DS1_발표관서_yyyymmddhhmi.csv 동네예보(개황) O FCT_DL1_예보구역코드_yyyymmddhhmi.csv 동네예보(육상) O FCT_DO1_예보구역코드_yyyymmddhhmi.csv 동네예보(해상) O FCT_WS1_발표관서_yyyymmddhhmi.csv 주간예보(개황) O FCT_WL2_예보구역코드_yyyymmddhhmi.csv 주간예보(육상) O FCT_WC1_예보구역코드_yyyymmddhhmi.csv 주간예보(도시) O FCT_WO2_예보구역코드_yyyymmddhhmi.csv 주간예보(해상) O rpt_wid_day_yyyymmddhhmi_지점번호_번호.pdf 단기 기상통보문 O rpt_wid_week_yyyymmddhhmi_지점번호_번호.pdf 주간 기상통보문 O fct_mon1_지점번호(.pdf)_yyyymmdd.pdf 1개월 전망 O fct_mon3_지점번호(.pdf)_yyyymmdd.pdf 3개월 전망 O 기상정보 AJKO60_yyyymmddhhmi 지진정보 O eqk_img_yyyymmddhhmmss_300.png 지진정보 및 통보 이미지 자료 O eqk_img_yyyymmddhhmmss_600.png 지진정보 및 통보 이미지 자료 O KTKO51_yyyymmddhhmi_지점번호 기상특보(코드화) O KTKO60_yyyymmddhhmi]지점번호 기상특보(한글화) O KTKO62_yyyymmddhhmi_지점번호 기상특보(예비특보) O RIKO60_yyyymmddhhmi]지점번호 기상정보(일2회제공) O RTKO63_yyyymmddhhmi]태풍정보구분번호 태풍정보(텍스트) O RTKO63_yyyymmddhhmi]태풍정보구분번호.pdf 태풍정보(통보문) O RTKO63_yyyymmddhhmi]태풍정보구분번호_en.png 태풍정보(영문이미지) O RTKO63_yyyymmddhhmi]태풍정보구분번호_ko.png 태풍정보(한글이미지) O MET_ANN_R60_yyyymmddhhmi]지점번호 기상속보 O WRN_FOG_yyyymmddhh24mi_{지점번호}_{발표호수}.png 안개정보(이미지) O WRN_FOG_yyyymmddhh24mi_{지점번호}_{발표호수}_{생성시각}.txt 안개정보 O 생활지수 FCT_IDX_A01_2_yyyymmddhh.csv (기상청 활용) 식중독지수 O FCT_IDX_A01_2_yyyymmddhh_##D.gif FCT_IDX_A02_yyyymmddhh.csv 부패지수 O FCT_IDX_A02_yyyymmddhh_##H.gif FCT_IDX_A03_yyyymmddhh.csv 체감온도지수 O FCT_IDX_A03_yyyymmddhh_##H.gif FCT_IDX_A04_yyyymmddhh.csv 동상가능지수 O FCT_IDX_A04_yyyymmddhh_##H.gif FCT_IDX_A05_yyyymmddhh.csv 열지수 O FCT_IDX_A05_yyyymmddhh_##H.gif FCT_IDX_A06_yyyymmddhh.csv 불쾌지수 O FCT_IDX_A06_yyyymmddhh_##H.gif FCT_IDX_A07_yyyymmddhh.csv 자외선지수 O FCT_IDX_A07_yyyymmddhh_##D.gif 동파지수 O FCT_IDX_A08_yyyymmddhh.csv FCT_IDX_A08_yyyymmddhh_##H.gif FCT_IDX_A09_yyyymmddhh.csv 대기오염소산지수 O

샘플코드를 만들기는 귀찮아서… 기상데이터포멧을 사용

각각 파일은 패턴을 가지고 있다. 단순히 비교를 한다면 이 파일들의 패턴을 목록에 담아서 몇번째 패턴과 일치하는지를 찾아 검색하는 단순 순차비교 알고리즘이 된다.

패턴은 시작문자열의 형태(FCT_DS1)… 또는 REGEX(FCT_DS1_[0-9]+_[0-9]{10}.csv)로 사용가능하다.

시작문자열 형태로 분류

1. 들어오는 파일을 _로 split. FCT - DS1 - Object - DL1 - IDX - A01 - 2 - Object

와 같은 형태로 사용할 수 있다.

Hash알고리즘을 이용하여 순차비교과정을 생략하고 단번에 파싱코드로 연결가능

 

Regex를 이용한 Hashing