vos-data-utils 1.0.9__tar.gz → 1.0.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vos-data-utils might be problematic. Click here for more details.
- {vos_data_utils-1.0.9/vos_data_utils.egg-info → vos_data_utils-1.0.11}/PKG-INFO +32 -1
- vos_data_utils-1.0.9/PKG-INFO → vos_data_utils-1.0.11/README.md +31 -20
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/__init__.py +1 -1
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/bjd.py +27 -6
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/convaddr.py +67 -13
- vos_data_utils-1.0.11/vdutils/data/bjd/20250630/bjd.txt +49878 -0
- vos_data_utils-1.0.11/vdutils/data/bjd/20250630/bjd_changed.txt +13730 -0
- vos_data_utils-1.0.11/vdutils/data/bjd/20250630/bjd_current.txt +20557 -0
- vos_data_utils-1.0.11/vdutils/data/bjd/20250630/bjd_frequency_dictionary.txt +11301 -0
- vos_data_utils-1.0.11/vdutils/data/bjd/20250630/bjd_smallest.txt +9794 -0
- vos_data_utils-1.0.11/vdutils/data/bjd/20250630/multiple_word_sgg_list.txt +65 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/date/date_dictionary.txt +42024 -42144
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/genpnu.py +10 -4
- vos_data_utils-1.0.11/vdutils/library/data.py +7083 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/tests/test_genpnu.py +5 -5
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/tests/tests.py +4 -4
- vos_data_utils-1.0.9/README.md → vos_data_utils-1.0.11/vos_data_utils.egg-info/PKG-INFO +51 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vos_data_utils.egg-info/SOURCES.txt +6 -0
- vos_data_utils-1.0.9/vdutils/library/data.py +0 -1954
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/setup.cfg +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/setup.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/bjdconnector.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/cordate.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/__init__.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20230701/bjd.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20230701/bjd_changed.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20230701/bjd_current.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20230701/bjd_frequency_dictionary.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20230701/bjd_smallest.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20230701/multiple_word_sgg_list.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240118/bjd.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240118/bjd_changed.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240118/bjd_current.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240118/bjd_frequency_dictionary.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240118/bjd_smallest.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240118/multiple_word_sgg_list.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240201/bjd.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240201/bjd_changed.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240201/bjd_current.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240201/bjd_frequency_dictionary.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240201/bjd_smallest.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240201/multiple_word_sgg_list.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240801/bjd.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240801/bjd_changed.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240801/bjd_current.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240801/bjd_frequency_dictionary.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240801/bjd_smallest.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20240801/multiple_word_sgg_list.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20250513/bjd.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20250513/bjd_changed.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20250513/bjd_current.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20250513/bjd_frequency_dictionary.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20250513/bjd_smallest.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/data/bjd/20250513/multiple_word_sgg_list.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/library/__init__.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/tests/__init__.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/tests/test_convaddr.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/tests/test_cordate.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/tests/test_vid.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vdutils/vid.py +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vos_data_utils.egg-info/dependency_links.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vos_data_utils.egg-info/entry_points.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vos_data_utils.egg-info/requires.txt +0 -0
- {vos_data_utils-1.0.9 → vos_data_utils-1.0.11}/vos_data_utils.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: vos-data-utils
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.11
|
|
4
4
|
Summary: description
|
|
5
5
|
Author: ValueOfSpace
|
|
6
6
|
Author-email: dev@valueofspace.com
|
|
@@ -154,6 +154,37 @@ vos-data-utils is a shared utility library essential for 'Value of Space' data w
|
|
|
154
154
|
- 2024년 5월 13일: '경기도 화성시 서신면 사곳리' 관련 행정구역 변경
|
|
155
155
|
- 날짜 빈도 dictionary 업데이트
|
|
156
156
|
|
|
157
|
+
</details>
|
|
158
|
+
<details>
|
|
159
|
+
<summary><strong>Version 1.0.10 - 2025.07</strong></summary>
|
|
160
|
+
|
|
161
|
+
<div style="color: gray;">
|
|
162
|
+
|
|
163
|
+
- 업데이트
|
|
164
|
+
- Window 환경 cp949 인코딩 이슈 처리
|
|
165
|
+
- 모듈 내 주소 데이터 읽어오는 부분 encoding 옵션 명시되지 않은 부분 self.encoding 으로 수정하여 default 옵션 적용 되지 않도록 변경
|
|
166
|
+
- 한자 포함 법정동명 예외 처리 이슈
|
|
167
|
+
- 법정동 데이터 생성 시 한자 표기 유지되도록 변경
|
|
168
|
+
- 평사리 특수 케이스 처리 적용
|
|
169
|
+
- genpnu 모듈 bjd_nm 입력변수로 받는 메서드의 예외처리 업데이트
|
|
170
|
+
- convaddr 모듈 업데이트
|
|
171
|
+
- 법정동 변경사항 보조 데이터 업데이트
|
|
172
|
+
- 입력된 문자열(한글 주소)에 변경전 법정동이 포함되어있으면 변경후 법정동명으로 교환하여 반환하는 기능 업데이트
|
|
173
|
+
- 법정동 데이터 업데이트(행정구역 변경사항 반영)
|
|
174
|
+
- 2024년 6월 30일: '경상북도 영덕군 영해면 대리' 관련 행정구역 변경
|
|
175
|
+
- 날짜 빈도 dictionary 업데이트
|
|
176
|
+
- 유닛 테스트 코드(`test_genpnu`) 업데이트
|
|
177
|
+
- dummy 데이터의 base_dt 하드코딩 부분 self.instance.base_dt_print 적용
|
|
178
|
+
|
|
179
|
+
</details>
|
|
180
|
+
<details>
|
|
181
|
+
<summary><strong>Version 1.0.11 - 2025.09</strong></summary>
|
|
182
|
+
|
|
183
|
+
<div style="color: gray;">
|
|
184
|
+
|
|
185
|
+
- 업데이트
|
|
186
|
+
- 날짜 빈도 dictionary 업데이트
|
|
187
|
+
|
|
157
188
|
</details>
|
|
158
189
|
</br>
|
|
159
190
|
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: vos-data-utils
|
|
3
|
-
Version: 1.0.9
|
|
4
|
-
Summary: description
|
|
5
|
-
Author: ValueOfSpace
|
|
6
|
-
Author-email: dev@valueofspace.com
|
|
7
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
-
Classifier: Operating System :: OS Independent
|
|
9
|
-
Classifier: Programming Language :: Python :: 3
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
-
Requires-Python: >=3.8
|
|
15
|
-
Description-Content-Type: text/markdown
|
|
16
|
-
Requires-Dist: symspellpy
|
|
17
|
-
Requires-Dist: pandas
|
|
18
|
-
Requires-Dist: requests
|
|
19
|
-
Requires-Dist: python-dotenv
|
|
20
|
-
|
|
21
1
|
vos-data-utils <br>
|
|
22
2
|
[](https://pypi.org/project/vos-data-utils/)
|
|
23
3
|
[](https://pypi.org/project/vos-data-utils/)
|
|
@@ -154,6 +134,37 @@ vos-data-utils is a shared utility library essential for 'Value of Space' data w
|
|
|
154
134
|
- 2024년 5월 13일: '경기도 화성시 서신면 사곳리' 관련 행정구역 변경
|
|
155
135
|
- 날짜 빈도 dictionary 업데이트
|
|
156
136
|
|
|
137
|
+
</details>
|
|
138
|
+
<details>
|
|
139
|
+
<summary><strong>Version 1.0.10 - 2025.07</strong></summary>
|
|
140
|
+
|
|
141
|
+
<div style="color: gray;">
|
|
142
|
+
|
|
143
|
+
- 업데이트
|
|
144
|
+
- Window 환경 cp949 인코딩 이슈 처리
|
|
145
|
+
- 모듈 내 주소 데이터 읽어오는 부분 encoding 옵션 명시되지 않은 부분 self.encoding 으로 수정하여 default 옵션 적용 되지 않도록 변경
|
|
146
|
+
- 한자 포함 법정동명 예외 처리 이슈
|
|
147
|
+
- 법정동 데이터 생성 시 한자 표기 유지되도록 변경
|
|
148
|
+
- 평사리 특수 케이스 처리 적용
|
|
149
|
+
- genpnu 모듈 bjd_nm 입력변수로 받는 메서드의 예외처리 업데이트
|
|
150
|
+
- convaddr 모듈 업데이트
|
|
151
|
+
- 법정동 변경사항 보조 데이터 업데이트
|
|
152
|
+
- 입력된 문자열(한글 주소)에 변경전 법정동이 포함되어있으면 변경후 법정동명으로 교환하여 반환하는 기능 업데이트
|
|
153
|
+
- 법정동 데이터 업데이트(행정구역 변경사항 반영)
|
|
154
|
+
- 2024년 6월 30일: '경상북도 영덕군 영해면 대리' 관련 행정구역 변경
|
|
155
|
+
- 날짜 빈도 dictionary 업데이트
|
|
156
|
+
- 유닛 테스트 코드(`test_genpnu`) 업데이트
|
|
157
|
+
- dummy 데이터의 base_dt 하드코딩 부분 self.instance.base_dt_print 적용
|
|
158
|
+
|
|
159
|
+
</details>
|
|
160
|
+
<details>
|
|
161
|
+
<summary><strong>Version 1.0.11 - 2025.09</strong></summary>
|
|
162
|
+
|
|
163
|
+
<div style="color: gray;">
|
|
164
|
+
|
|
165
|
+
- 업데이트
|
|
166
|
+
- 날짜 빈도 dictionary 업데이트
|
|
167
|
+
|
|
157
168
|
</details>
|
|
158
169
|
</br>
|
|
159
170
|
|
|
@@ -10,7 +10,7 @@ Correction function to align with the current legal district by reflecting chang
|
|
|
10
10
|
Conversion function to transform address strings into Parcel Number (PNU)
|
|
11
11
|
Generation function for unique transaction case IDs in ValueofSpace
|
|
12
12
|
"""
|
|
13
|
-
version = "1.0.
|
|
13
|
+
version = "1.0.11"
|
|
14
14
|
author = "ValueOfSpace"
|
|
15
15
|
description = "description"
|
|
16
16
|
license = "MIT License"
|
|
@@ -205,18 +205,38 @@ class Bjd():
|
|
|
205
205
|
return sgg_nm
|
|
206
206
|
|
|
207
207
|
|
|
208
|
+
@staticmethod
|
|
209
|
+
def _convert_bjd_nm(
|
|
210
|
+
bjd_nm: Optional[str]
|
|
211
|
+
) -> str:
|
|
212
|
+
"""
|
|
213
|
+
평사리의 한자 표기를 올바른 형태로 변환한다
|
|
214
|
+
bjd_nm is None 일 경우 ''을 반환한다
|
|
215
|
+
"""
|
|
216
|
+
|
|
217
|
+
if bjd_nm is not None and bjd_nm in ['평(坪)사리', '평(平)사리']:
|
|
218
|
+
# 평사리의 한자 표기 변환 (예: 평(坪)사리 -> 평사리(坪沙), 평(平)사리 -> 평사리(平沙))
|
|
219
|
+
bjd_nm = re.sub(r'평\(坪\)사리', '평사리(坪沙)', bjd_nm)
|
|
220
|
+
bjd_nm = re.sub(r'평\(平\)사리', '평사리(平沙)', bjd_nm)
|
|
221
|
+
return bjd_nm
|
|
222
|
+
return bjd_nm
|
|
223
|
+
|
|
224
|
+
|
|
208
225
|
@staticmethod
|
|
209
226
|
def _clean_bjd_nm(
|
|
210
227
|
bjd_nm: Optional[str]
|
|
211
228
|
) -> str:
|
|
212
229
|
"""
|
|
213
|
-
행정구역명에서 한글과 숫자를 제외하고 삭제하는 기능
|
|
230
|
+
행정구역명에서 한글과 숫자를 제외하고 삭제하는 기능
|
|
231
|
+
한자 표기가 포함된 괄호는 유지한다
|
|
214
232
|
bjd_nm is None 일 경우 ''을 반환한다
|
|
215
233
|
"""
|
|
216
234
|
|
|
217
235
|
if bjd_nm is not None:
|
|
218
|
-
|
|
219
|
-
|
|
236
|
+
# 한자 표기가 포함된 괄호는 유지하고, 다른 특수문자만 제거
|
|
237
|
+
# 한자 범위: \u4e00-\u9fff (CJK Unified Ideographs)
|
|
238
|
+
bjd_nm = re.sub(r'\([^)]*[^\u4e00-\u9fff)][^)]*\)', '', bjd_nm)
|
|
239
|
+
bjd_nm = re.sub(r'[^ 0-9ㄱ-ㅎ가-힣()\u4e00-\u9fff]+', '', bjd_nm)
|
|
220
240
|
return bjd_nm
|
|
221
241
|
return ''
|
|
222
242
|
|
|
@@ -249,6 +269,7 @@ class Bjd():
|
|
|
249
269
|
res_df['시군구명'] = res_df['시군구명'].apply(lambda x: self._clean_bjd_nm(x))
|
|
250
270
|
res_df['읍면동명'] = res_df['읍면동명'].apply(lambda x: self._clean_bjd_nm(x))
|
|
251
271
|
res_df['리명'] = res_df['리명'].apply(lambda x: self._clean_bjd_nm(x))
|
|
272
|
+
res_df['리명'] = res_df['리명'].apply(lambda x: self._convert_bjd_nm(x)) # NOTE 평사리 한자 표기 변환
|
|
252
273
|
res_df['시도명'] = res_df['시도명'].apply(lambda x: x.replace(' ', ''))
|
|
253
274
|
# res_df['시군구명'] = res_df['시군구명'].apply(lambda x: x.replace(' ', ''))
|
|
254
275
|
res_df['읍면동명'] = res_df['읍면동명'].apply(lambda x: x.replace(' ', ''))
|
|
@@ -288,7 +309,7 @@ class Bjd():
|
|
|
288
309
|
)
|
|
289
310
|
self.logger.info("Success Saved Bjd Dataframe To Text File")
|
|
290
311
|
if self.multiple_word_sgg_list is not None:
|
|
291
|
-
with open(self.file_name_multiple_word_sgg_list, 'w') as f:
|
|
312
|
+
with open(self.file_name_multiple_word_sgg_list, 'w', encoding=self.encoding) as f:
|
|
292
313
|
f.writelines('\n'.join(self.multiple_word_sgg_list))
|
|
293
314
|
f.close()
|
|
294
315
|
self.logger.info("Success Saved Multiple Sigungu List To Text File")
|
|
@@ -513,7 +534,7 @@ class SmallestBjd(CurrentBjd):
|
|
|
513
534
|
def _save_smallest_bjd(self):
|
|
514
535
|
if self.smallest_bjd_list is None:
|
|
515
536
|
self._create_smallest_bjd()
|
|
516
|
-
with open(self.file_name_bjd_smallest, 'w') as f:
|
|
537
|
+
with open(self.file_name_bjd_smallest, 'w', encoding=self.encoding) as f:
|
|
517
538
|
f.writelines('\n'.join(self.smallest_bjd_list))
|
|
518
539
|
f.close()
|
|
519
540
|
self.logger.info("Success Saved Changed Smallest Bjd Name List To Text File")
|
|
@@ -544,7 +565,7 @@ class BjdFrequencyDictionary(CurrentBjd):
|
|
|
544
565
|
if self.bjd_frequency_dictionary is None:
|
|
545
566
|
self._create_bjd_frequency_dictionary()
|
|
546
567
|
bjd_frequency_list = list((key, value) for key, value in self.bjd_frequency_dictionary.items())
|
|
547
|
-
with open(self.file_name_bjd_frequency_dictionary, 'w') as f:
|
|
568
|
+
with open(self.file_name_bjd_frequency_dictionary, 'w', encoding=self.encoding) as f:
|
|
548
569
|
vstr = ''
|
|
549
570
|
sep = ','
|
|
550
571
|
for line in bjd_frequency_list:
|
|
@@ -161,13 +161,13 @@ class ConvAddr():
|
|
|
161
161
|
|
|
162
162
|
def _prepare(self):
|
|
163
163
|
|
|
164
|
-
with open(self.file_name_bjd_current, 'r') as file_bjd_current:
|
|
164
|
+
with open(self.file_name_bjd_current, 'r', encoding=self.encoding) as file_bjd_current:
|
|
165
165
|
self.bjd_current_dic: Dict[str, str] = dict((line.split('\t')[2], line.split('\t')[9].replace('\n', '')) for line in file_bjd_current)
|
|
166
166
|
|
|
167
|
-
with open(self.file_name_bjd_smallest, 'r') as file_bjd_smallest:
|
|
167
|
+
with open(self.file_name_bjd_smallest, 'r', encoding=self.encoding) as file_bjd_smallest:
|
|
168
168
|
self.bjd_smallest_list: List[str] = [line.strip() for line in file_bjd_smallest]
|
|
169
169
|
|
|
170
|
-
with open(self.file_name_multiple_word_sgg_list, 'r') as file_multiple_word_sgg_list:
|
|
170
|
+
with open(self.file_name_multiple_word_sgg_list, 'r', encoding=self.encoding) as file_multiple_word_sgg_list:
|
|
171
171
|
self.multiple_word_sgg_list: List[str] = [line.strip() for line in file_multiple_word_sgg_list]
|
|
172
172
|
|
|
173
173
|
bjd_df: pd.DataFrame = pd.read_csv(
|
|
@@ -177,7 +177,13 @@ class ConvAddr():
|
|
|
177
177
|
encoding=self.encoding,
|
|
178
178
|
dtype={
|
|
179
179
|
'과거법정동코드': str,
|
|
180
|
-
'법정동코드': str
|
|
180
|
+
'법정동코드': str,
|
|
181
|
+
'생성일자': object,
|
|
182
|
+
'삭제일자': object,
|
|
183
|
+
'시도명': str,
|
|
184
|
+
'시군구명': str,
|
|
185
|
+
'읍면동명': str,
|
|
186
|
+
'리명': str
|
|
181
187
|
})
|
|
182
188
|
self.bjd_df = bjd_df
|
|
183
189
|
self.sido_list: List[str] = list(sido for sido in bjd_df['시도명'].unique() if isinstance(sido, str))
|
|
@@ -189,7 +195,17 @@ class ConvAddr():
|
|
|
189
195
|
self.file_name_bjd_current,
|
|
190
196
|
sep=self.sep,
|
|
191
197
|
engine='python',
|
|
192
|
-
encoding=self.encoding
|
|
198
|
+
encoding=self.encoding,
|
|
199
|
+
dtype={
|
|
200
|
+
'과거법정동코드': str,
|
|
201
|
+
'법정동코드': str,
|
|
202
|
+
'생성일자': object,
|
|
203
|
+
'삭제일자': object,
|
|
204
|
+
'시도명': str,
|
|
205
|
+
'시군구명': str,
|
|
206
|
+
'읍면동명': str,
|
|
207
|
+
'리명': str
|
|
208
|
+
}
|
|
193
209
|
)
|
|
194
210
|
self.bjd_current_bjd_nm_list: List[str] = list(bjd_nm for bjd_nm in bjd_current_df['법정동명'] if bjd_nm is not None)
|
|
195
211
|
bjd_current_df['시도시군구명'] = bjd_current_df[['시도명', '시군구명']].apply(lambda x: self._concat_sido_sgg(*x), axis=1)
|
|
@@ -207,8 +223,15 @@ class ConvAddr():
|
|
|
207
223
|
encoding=self.encoding,
|
|
208
224
|
dtype={
|
|
209
225
|
'과거법정동코드': str,
|
|
210
|
-
'법정동코드': str
|
|
226
|
+
'법정동코드': str,
|
|
227
|
+
'생성일자_변경전': object,
|
|
228
|
+
'삭제일자_변경전': object,
|
|
229
|
+
'생성일자_변경후': object,
|
|
230
|
+
'삭제일자_변경후': object,
|
|
231
|
+
'법정동명_변경전': str,
|
|
232
|
+
'법정동명_변경후': str
|
|
211
233
|
})
|
|
234
|
+
self.bjd_changed_df = bjd_changed_df
|
|
212
235
|
sub_bjd_changed_df = bjd_changed_df.loc[
|
|
213
236
|
(bjd_changed_df['법정동명_변경후'].isnull()==False) &
|
|
214
237
|
(bjd_changed_df['법정동명_변경전'].isnull()==False)
|
|
@@ -324,6 +347,21 @@ class ConvAddr():
|
|
|
324
347
|
return changed_bjd_list
|
|
325
348
|
|
|
326
349
|
|
|
350
|
+
def check_is_current_bjd(
|
|
351
|
+
self,
|
|
352
|
+
bjd_nm: str
|
|
353
|
+
) -> bool:
|
|
354
|
+
|
|
355
|
+
"""
|
|
356
|
+
입력된 법정동명이 현재 법정동명 리스트에 포함되어있는지 확인하여 반환
|
|
357
|
+
"""
|
|
358
|
+
|
|
359
|
+
if bjd_nm in self.bjd_current_bjd_nm_list:
|
|
360
|
+
return True
|
|
361
|
+
else:
|
|
362
|
+
return False
|
|
363
|
+
|
|
364
|
+
|
|
327
365
|
def correct_changed_bjd(
|
|
328
366
|
self,
|
|
329
367
|
addr: str,
|
|
@@ -358,20 +396,36 @@ class ConvAddr():
|
|
|
358
396
|
raise ValueError("bjd_changed_dic is None")
|
|
359
397
|
|
|
360
398
|
origin_addr: str = addr
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
399
|
+
last_changed_bjd_nm: str = None
|
|
400
|
+
max_iterations = 10 # 무한 루프 방지
|
|
401
|
+
iteration = 0
|
|
402
|
+
|
|
403
|
+
while iteration < max_iterations:
|
|
404
|
+
changed_list: List[str] = list()
|
|
405
|
+
for old_bjd_nm in self.bjd_changed_old_bjd_nm_list:
|
|
406
|
+
if old_bjd_nm in addr:
|
|
407
|
+
changed_list.append(old_bjd_nm)
|
|
408
|
+
|
|
409
|
+
changed_list = self.union_similar_changed_bjd(changed_list)
|
|
410
|
+
if not changed_list: # 더 이상 변경할 것이 없으면 종료
|
|
411
|
+
break
|
|
365
412
|
|
|
366
|
-
changed_list = self.union_similar_changed_bjd(changed_list)
|
|
367
|
-
if changed_list:
|
|
368
413
|
for changed_bjd_nm in changed_list:
|
|
369
414
|
after_changed_bjd_nm = self.bjd_changed_dic[changed_bjd_nm]
|
|
415
|
+
last_changed_bjd_nm = after_changed_bjd_nm
|
|
370
416
|
addr = addr.replace(changed_bjd_nm, after_changed_bjd_nm)
|
|
371
417
|
if is_log:
|
|
372
|
-
self.logger.info(f'{origin_addr}')
|
|
373
418
|
self.logger.info(f'해당 법정동명은 변경되었습니다. 변경전 : [ {changed_bjd_nm} ] 변경후 : [ {after_changed_bjd_nm} ]')
|
|
374
419
|
|
|
420
|
+
iteration += 1
|
|
421
|
+
|
|
422
|
+
if last_changed_bjd_nm is not None:
|
|
423
|
+
if self.check_is_current_bjd(bjd_nm=last_changed_bjd_nm):
|
|
424
|
+
if is_log:
|
|
425
|
+
self.logger.info(f'해당 법정동명은 현재 법정동명입니다.')
|
|
426
|
+
else:
|
|
427
|
+
if is_log:
|
|
428
|
+
self.logger.warning(f'해당 법정동명은 현재 법정동명이 아닙니다.')
|
|
375
429
|
return addr
|
|
376
430
|
|
|
377
431
|
|