퍼지 맵 매크로 및 브래킷 로직¶
Aura는 ‘FUZZY_MAP_pre.py’ 파일에서 여러 사전 처리 규칙을 그룹화하여 ‘시작 규칙’이 트리거되면 응집력 있는 파이프라인으로 순차적으로 실행할 수 있도록 지원합니다. 이 문서에서는 이 기능의 디자인 철학, 구문 및 실행 흐름을 설명합니다.
핵심 디자인 원칙¶
중복성 없음: 그룹 내부의 규칙은 표준 Python 튜플로 유지됩니다.
('replacement_text', r'regex_pattern', 임계값, flags_and_options)이중 사용성: 그룹 내의 개별 규칙은 완전히 기능하는 독립형 규칙입니다. 그룹이 트리거되지 않으면 상위 루프에서 정상적으로 평가됩니다.
수동 종료 마커: 그룹의 끝은 자체적으로는 일치하지 않는 수동 규칙 항목에 의해 정의됩니다. 이는 순전히 파서의 경계 표시 역할을 합니다.
하이브리드 폴백(비일치 시 추가): 그룹이 활성화되면 모든 내부 규칙이 출력에 기여해야 합니다. 내부 규칙의 정규식이 텍스트와 일치하면 일반적인 대체가 발생합니다. 일치하지 않으면 대체 텍스트가 공백과 함께 현재 텍스트에 추가됩니다.
구문 및 구조¶
매크로 그룹은 FUZZY_MAP_pre.py의 시작 규칙과 종료 규칙 사이에 일련의 표준 규칙을 래핑하여 정의됩니다.
1. 시작 규칙¶
시작 규칙은 일치할 때 매크로를 트리거하는 표준 규칙입니다. 옵션 사전에 ‘group_start’ 키가 포함되어 있습니다.
('replacement', r'start_pattern', 100, {'group_start': 'unique_group_name'})
2. 내부 규칙¶
내부 규칙은 시작 규칙 뒤에 순차적으로 배치되는 표준 규칙입니다. 특별한 메타데이터가 필요하지 않습니다.
('inner_replacement', r'inner_pattern', 100, {})
3. 종료 규칙(패시브 마커)¶
종료 규칙에는 옵션 사전에 None 대체, 빈 패턴 및 'group_end' 키가 있습니다.
(None, r'', 100, {'group_end': 'unique_group_name'})
구체적인 예¶
다음은 FUZZY_MAP_pre.py 파일에 정의된 실제 테스트 사례입니다.
FUZZY_MAP_pre = [
# Start Rule: Triggers the group 'sandbox_test' when "start sandbox" matches
('Sandbox:', r'start\w* sandbox', 100, {'group_start': 'sandbox_test'}),
# Inner Rule 1: Replaces "apfel" with "birne" if present
('birne', r'apfel', 100, {}),
# Inner Rule 2: Replaces "banane" if present, otherwise appends "banane"
('banane', r'banane', 100, {}),
# End Rule: Passive boundary marker
(None, r'', 100, {'group_end': 'sandbox_test'}),
]
실행 흐름 시나리오:¶
시나리오 A(트리거된 매크로):
입력:
"start sandbox mit apfel"예상 흐름:
시작 규칙은
"start sandbox"와 일치하여 이를"Sandbox:"-> 현재 텍스트:"Sandbox: mit apfel"로 대체합니다.'sandbox_test'그룹이 트리거됩니다."Sandbox: mit apfel"에서 내부 규칙을 재귀적으로 실행합니다.
내부 규칙 1은
"apfel"과 일치하고"birne"으로 대체됩니다. -> 현재 텍스트:"Sandbox: mit birne".내부 규칙 2는
"banane"과 일치하지 않습니다. 그룹이 활성화되어 있으므로"banane"을 추가하는 것으로 대체됩니다. -> 현재 텍스트:"Sandbox: mit birne banane".
최종 텍스트
"Sandbox: mit birne banane"가 반환되고 LanguageTool에 의해 수정됩니다.
출력:
"샌드박스: mit Birne Banane"시나리오 B(트리거되지 않은 매크로 - 이중 유용성):
입력:
"ein apfel und eine kirsche"예상 흐름:
시작 규칙이 일치하지 않습니다. ``sandbox_test’’ 그룹은 비활성 상태로 유지됩니다.
루프는 다음 규칙으로 진행됩니다.
내부 규칙 1:
"apfel"과 일치하여"birne"로 대체 -> 현재 텍스트:"ein birne und eine kirsche".내부 규칙 2: 일치하지 않습니다. 그룹이 트리거되지 않았으므로 규칙은 일반적인 독립형 규칙으로 작동하며 아무 것도 추가되지 않습니다.
종료 규칙은 무시됩니다.
출력:
"ein birne und eine kirsche"
기술 세부정보(고급설정)¶
격리된 재귀: 그룹이 트리거되면 엔진은
custom_rules=[inner_rule]을 사용하여process_text_in_Background를 반복적으로 호출합니다. 이를 통해 각 내부 규칙이 전체 동기 파이프라인 패스 내에서 실행될 수 있습니다.성능 및 안정성 보호 장치:
시퀀스 우회: 내부 재귀 실행은 교착 상태 및 실행 지연을 방지하기 위해
chunk_id시퀀스 큐를 우회합니다.I/O 및 TTS 억제: 재귀 실행은 중간 파일 쓰기 및 TTS 음성 출력을 억제하여 최종 안정화된 텍스트만 작성 및 음성화되도록 합니다.
안정성 보호: 재귀 실행은 대체 추가 중에 무한 안정성 루프를 방지하기 위해 한 번의 반복 후에 엄격하게 중단됩니다.
안전한 종료: 안정성 검사는 최대 반복 횟수(
MAX_ITERATIONS_FOR_SAFETY)에 엄격하게 의존하여 무한 루프를 방지하고 합법적이고 느린 매크로 실행을 조기에 중단할 수 있는 시간 기반 조절을 우회합니다. CODE_BLOCK_4