|
""" |
|
λμμ΄ μ²λ¦¬ λͺ¨λ |
|
""" |
|
import os |
|
import sys |
|
import re |
|
from typing import Dict, List, Optional, Set |
|
|
|
|
|
DEFAULT_SYNONYMS = { |
|
"μμΈλ μ΄ν°": "μ‘μΈμμ΄ν°", |
|
"μ‘μΈμμ΄ν°": "μ‘μΈμμ΄ν°", |
|
"λͺ¨ν°": "μ‘μΈμμ΄ν°", |
|
"컨λ°": "컨νΈλ‘€λ°μ€" |
|
} |
|
|
|
|
|
class SynonymsHandler: |
|
""" |
|
λΆνλͺ
μ λμμ΄λ₯Ό μ²λ¦¬νλ ν΄λμ€ |
|
""" |
|
|
|
def __init__(self, synonyms_file: Optional[str] = None): |
|
""" |
|
λμμ΄ νΈλ€λ¬ μ΄κΈ°ν |
|
|
|
Args: |
|
synonyms_file: λμμ΄ νμΌ κ²½λ‘ (μ νμ ) |
|
""" |
|
self.synonyms = {} |
|
self.loaded = False |
|
|
|
|
|
if synonyms_file and os.path.exists(synonyms_file): |
|
self._load_from_file(synonyms_file) |
|
|
|
|
|
elif os.path.exists(".venv/SYNONYMS/MP_synonyms.py"): |
|
self._load_from_file(".venv/SYNONYMS/MP_synonyms.py") |
|
|
|
|
|
elif os.path.exists("MP_synonyms.py"): |
|
self._load_from_file("MP_synonyms.py") |
|
|
|
|
|
else: |
|
print("λμμ΄ νμΌμ μ°Ύμ μ μμ΄ κΈ°λ³Έ λμμ΄ μ¬μ μ μ¬μ©ν©λλ€.") |
|
self.synonyms = DEFAULT_SYNONYMS |
|
self.loaded = True |
|
|
|
def _load_from_file(self, file_path: str) -> None: |
|
""" |
|
νμΌμμ λμμ΄ μ¬μ λ‘λ |
|
|
|
Args: |
|
file_path: λμμ΄ νμΌ κ²½λ‘ |
|
""" |
|
try: |
|
|
|
with open(file_path, 'r', encoding='utf-8') as f: |
|
content = f.read() |
|
|
|
|
|
synonyms_match = re.search(r'SYNONYMS\s*=\s*\{(.*?)\}', content, re.DOTALL) |
|
if synonyms_match: |
|
|
|
synonyms_str = "{" + synonyms_match.group(1) + "}" |
|
|
|
|
|
pattern = r'"([^"]*)"\s*:\s*"([^"]*)"' |
|
matches = re.findall(pattern, synonyms_str) |
|
|
|
self.synonyms = {key: value for key, value in matches} |
|
self.loaded = True |
|
print(f"λμμ΄ μ¬μ λ‘λ μλ£: {file_path}, {len(self.synonyms)}κ° νλͺ©") |
|
else: |
|
print(f"νμΌμμ SYNONYMS λμ
λ리λ₯Ό μ°Ύμ μ μμ΅λλ€: {file_path}") |
|
self.synonyms = DEFAULT_SYNONYMS |
|
self.loaded = True |
|
|
|
except Exception as e: |
|
print(f"λμμ΄ μ¬μ λ‘λ μ€ μ€λ₯: {e}") |
|
self.synonyms = DEFAULT_SYNONYMS |
|
self.loaded = True |
|
|
|
def find_in_text(self, text: str) -> List[str]: |
|
""" |
|
ν
μ€νΈμμ λμμ΄ μ°ΎκΈ° |
|
|
|
Args: |
|
text: κ²μν ν
μ€νΈ |
|
|
|
Returns: |
|
μ°Ύμ νμ€νλ λΆνλͺ
리μ€νΈ |
|
""" |
|
if not text or not self.loaded: |
|
return [] |
|
|
|
|
|
text = text.lower() |
|
|
|
found_parts = set() |
|
|
|
|
|
for keyword, standard_name in self.synonyms.items(): |
|
if keyword.lower() in text: |
|
found_parts.add(standard_name) |
|
|
|
return list(found_parts) |
|
|
|
def standardize(self, part_name: str) -> str: |
|
""" |
|
λΆνλͺ
μ νμ€ν |
|
|
|
Args: |
|
part_name: νμ€νν λΆνλͺ
|
|
|
|
Returns: |
|
νμ€νλ λΆνλͺ
|
|
""" |
|
if not part_name or not self.loaded: |
|
return part_name |
|
|
|
|
|
part_lower = part_name.lower().strip() |
|
|
|
|
|
for keyword, standard_name in self.synonyms.items(): |
|
if part_lower == keyword.lower(): |
|
return standard_name |
|
|
|
|
|
return part_name |
|
|
|
def standardize_parts_list(self, parts: List[str]) -> List[str]: |
|
""" |
|
λΆνλͺ
리μ€νΈλ₯Ό νμ€ν |
|
|
|
Args: |
|
parts: νμ€νν λΆνλͺ
리μ€νΈ |
|
|
|
Returns: |
|
νμ€νλ λΆνλͺ
리μ€νΈ |
|
""" |
|
if not parts or not self.loaded: |
|
return parts |
|
|
|
standardized = set() |
|
|
|
for part in parts: |
|
if part: |
|
standardized.add(self.standardize(part)) |
|
|
|
return list(standardized) |