형식 검증
1. 순위 검증
import pandas as pd
import numpy as np
def check_sequence_and_start_order(data):
"""
주어진 번호 매기기(numbering sequence) 값을 이용하여 형식검증을 진행합니다.
Args:
data (DataFrame): 업데이트할 데이터 프레임.
Returns:
DataFrame: 업데이트된 데이터 프레임.
"""
# 'None' 값이 있는 행 제거
data = data.dropna(subset=['Numbering Sequence'])
data['Verification Content'] = 'Normal'
data['Verification Result'] = True
data = refine_numbering_sequence(data)
# 데이터가 비어 있는 경우를 확인
if data.empty:
return True, "None Type pass", []
return data
def refine_numbering_sequence(data):
"""
번호 매기기 순서를 정제합니다.
"""
data['Numbering Sequence'] = data['Numbering Sequence'].astype(str)
# 숫자 시퀀스 추출
numeric_part = data['Numbering Sequence'].str.extract(r'(\d+)')[0].dropna().astype(int)
# 알파벳 시퀀스 추출
alphabetic_part = data['Numbering Sequence'].str.extract(r'([a-zA-Z]+)')[0].dropna()
data.loc[~numeric_part.index.isin(data.index), 'Verification Content'] = 'No numeric part'
data.loc[~alphabetic_part.index.isin(data.index), 'Verification Content'] = 'No alphabetic part'
return data
def is_numeric_sequence_ordered(sequence):
"""
숫자 시퀀스가 올바른 순서인지 확인합니다.
"""
first_index = sequence.index[0]
if sequence['Numbering Sequence'].iloc[0] != 1:
sequence.at[first_index, 'Verification Content'] = 'The beginning of the Numeric sequence was wrong.'
sequence.at[first_index, 'Verification Result'] = False
def is_alphabetic_sequence_ordered(sequence):
"""
알파벳 시퀀스가 올바른 순서인지 확인합니다.
"""
first_index = sequence.index[0]
if sequence['Numbering Sequence'].iloc[0] != 'A':
sequence.at[first_index, 'Verification Content'] = 'The beginning of the Alphabetic sequence was wrong.'
sequence.at[first_index, 'Verification Result'] = False
# 예제 데이터
data = pd.DataFrame({
'Numbering Sequence': ['A1', 'B2', 'C3', np.nan, 'D4']
})
# 함수 호출
updated_data = check_sequence_and_start_order(data)
print(updated_data)
개발된 알고리즘은 같은 부모의 문단에 속한 시퀀스를 활용하여 문단 구조를 세밀하게 분석하고, 이를 통해 데이터 형식 검증의 결과로 전환함. 이 과정을 통해 추출된 데이터는 체계적이고 자동화된 방식으로 데이터베이스(DB)에 저장됨.
2. 레벨과 넘버링 타입의 일관성 검증
import pandas as pd
def verification_level_numberingtype(data, level_bowl):
"""
데이터 프레임에서 'Level'과 'Numbering Type'의 일관성을 검증합니다.
Args:
data (DataFrame): 검증할 데이터 프레임.
level_bowl (list): 검증할 레벨들을 포함하는 리스트.
Returns:
DataFrame: 검증 결과가 업데이트된 데이터 프레임.
"""
# 제외할 타입 정의
exclude_types = ['NOTE', 'Bullet', 'No Type', 'NOTE:n']
point_five_exclude_types = ['NOTE:', 'NOTE:n', 'NOTE:n.']
section_types = ['CoverPage', 'RevisionSummary', 'TOC']
# 초기 검증 결과값 설정
data['Verification Content'] = 'Normal'
data['Verification Result'] = True
data['Numbering Type Change'] = data['Numbering Type']
# 각 레벨에 대해 검증 수행
for level in level_bowl:
level_dataset = data[data['Level'] == level]
# 특정 숫자 콤보에 대한 처리
if level != 1:
filtered_data = level_dataset[~level_dataset['Numbering Type'].isin(exclude_types)]
mode_series = filtered_data['Numbering Type'].mode()
else:
filtered_data = level_dataset[~level_dataset['Numbering Type'].isin(point_five_exclude_types)]
mode_series = filtered_data['Numbering Type'].mode()
# 모든 값이 같은 경우 검증 결과 업데이트
if not mode_series.empty:
level_mode = mode_series.iloc[0]
for index, row in filtered_data.iterrows():
if row['Numbering Type'] not in exclude_types and row['Numbering Type'] != level_mode and 'SECTION' not in row:
data.at[index, 'Verification Content'] = 'Level and numbering type don\'t match.'
data.at[index, 'Verification Result'] = False
data.at[index, 'Numbering Type Change'] = level_mode
elif row['Numbering Type'] not in point_five_exclude_types and row['Numbering Type'] not in level_mode and 'SECTION' not in row:
data.at[index, 'Verification Content'] = 'Level and numbering type don\'t match.'
data.at[index, 'Verification Result'] = False
data.at[index, 'Numbering Type Change'] = level_mode + ':NOTE' + 'NOTE:n' + 'NOTE:n.'
data['Verification Type'] = 'Verifying the Level and Numbering'
return data
# 예제 데이터 프레임
data = pd.DataFrame({
'Level': [1, 1, 2, 2, 3],
'Numbering Type': ['A1', 'B2', 'C3', 'D4', 'E5']
})
# 함수 호출
level_bowl = [1, 2, 3]
updated_data = verification_level_numberingtype(data, level_bowl)
print(updated_data)
개발된 알고리즘은 문단에 속한 레벨과 넘버링 타입을 활용하여 문단 계층 구조가 규칙적이고 체계적으로 이루어졌는지 면밀하게 검토하고 이를 통해 데이터 형식 검증의 결과로 전환함. 이 과정을 통해 추출된 데이터는 체계적이고 자동화된 방식으로 데이터베이스(DB)에 저장됨.
'Data-Driven System Development > 절차서 검증을 위한 자연어처리 기술 개발' 카테고리의 다른 글
절차서 검증을 위한 자연어처리 기술 개발(검증 요약 및 검토 리포트) (0) | 2024.06.30 |
---|---|
절차서 검증을 위한 자연어처리 기술 개발(자연어처리 알고리즘) (0) | 2024.06.23 |
절차서 검증을 위한 자연어처리 기술 개발(전처리 및 알고리즘 개발) (0) | 2024.06.22 |
절차서 검증을 위한 자연어처리 기술 개발 (0) | 2024.06.22 |