codeSearch/test/clean_database.py

99 lines
2.9 KiB
Python

import sqlite3
import re
def clean_text(text):
"""
텍스트에서 불필요한 접두어를 제거합니다.
Args:
text (str): 정제할 텍스트
Returns:
str: 정제된 텍스트
"""
if not text:
return text
# 다양한 접두어 제거
prefixes = [
"반응 : ", "반응\n1)", "반응\n0)",
"검지조건 : ", "검지조건\n1)", "검지조건\n0)",
"소거조건 : ", "소거조건\n1)", "소거조건\n0)",
"조치방법 : ", "조치방법\n1)", "조치방법\n0)",
"관련도면 : ", "관련도면\n1)", "관련도면\n0)"
]
for prefix in prefixes:
text = text.replace(prefix, '').strip()
return text.strip()
def extract_drawing(text):
"""
"회로 도면 : "으로 시작하는 내용을 추출합니다.
Args:
text (str): 원본 텍스트
Returns:
tuple: (정제된 action, drawing)
"""
if not text:
return text, None
# 회로 도면 추출
drawing_match = re.search(r'회로 도면 : (.+)', text)
drawing = drawing_match.group(1).strip() if drawing_match else None
# 회로 도면 부분 제거
if drawing:
text = re.sub(r'회로 도면 : .+', '', text).strip()
return text, drawing
def clean_database():
"""데이터베이스의 레코드를 정제합니다."""
conn = sqlite3.connect('fault_codes.db')
cursor = conn.cursor()
# 테이블의 모든 레코드 가져오기
cursor.execute("SELECT * FROM fault_code_list")
records = cursor.fetchall()
# 컬럼 이름 가져오기
cursor.execute("PRAGMA table_info(fault_code_list)")
columns = [column[1] for column in cursor.fetchall()]
# 업데이트할 레코드 준비
updated_records = []
for record in records:
record_dict = dict(zip(columns, record))
# 각 텍스트 필드 정제
# record_dict['reaction'] = clean_text(record_dict['reaction'])
# record_dict['detect_condition'] = clean_text(record_dict['detect_condition'])
record_dict['clear_condition'] = clean_text(record_dict['clear_condition'])
# action에서 drawing 추출
# record_dict['action'], record_dict['drawing'] = extract_drawing(record_dict['action'])
# record_dict['action'] = clean_text(record_dict['action'])
# 업데이트할 레코드 준비
updated_record = tuple(record_dict[col] for col in columns)
updated_records.append(updated_record)
# 테이블 업데이트
cursor.execute("DELETE FROM fault_code_list")
cursor.executemany(f"""
INSERT INTO fault_code_list ({','.join(columns)})
VALUES ({','.join(['?']*len(columns))})
""", updated_records)
conn.commit()
conn.close()
print("데이터베이스 정제 완료!")
if __name__ == "__main__":
clean_database()