Module pyjallib.namePart

namePart 모듈 - 이름의 각 부분을 표현하는 기능 제공 이름 부분의 사전 정의된 값과 가중치 매핑을 관리하는 클래스 구현

Classes

class NamePart (inName='',
inType=NamePartType.UNDEFINED,
inPredefinedValues=None,
inDescriptions=None,
inIsDirection=False,
inKoreanDescriptions=None)
Expand source code
class NamePart:
    """
    이름 부분(name part)을 관리하기 위한 클래스.
    이름과 해당 부분에 대한 사전 선언된 값들을 관리합니다.
    """
    
    def __init__(self, inName="", inType=NamePartType.UNDEFINED, inPredefinedValues=None, inDescriptions=None, inIsDirection=False, inKoreanDescriptions=None):
        """
        NamePart 클래스 초기화
        
        Args:
            inName: 이름 부분의 이름 (예: "Base", "Type", "Side" 등)
            inPredefinedValues: 사전 선언된 값 목록 (기본값: None, 빈 리스트로 초기화)
            inType: NamePart의 타입 (NamePartType 열거형 값)
            inDescriptions: 사전 선언된 값들의 설명 목록 (기본값: None, 빈 리스트로 초기화)
            inIsDirection: 방향성 여부 (기본값: False)
            inKoreanDescriptions: 사전 선언된 값들의 한국어 설명 목록 (기본값: None, 빈 리스트로 초기화)
        """
        self._name = inName
        self._predefinedValues = inPredefinedValues if inPredefinedValues is not None else []
        self._weights = []
        self._type = inType
        self._descriptions = inDescriptions if inDescriptions is not None else [""] * len(self._predefinedValues)
        self._koreanDescriptions = inKoreanDescriptions if inKoreanDescriptions is not None else [""] * len(self._predefinedValues) # Add korean descriptions
        self._isDirection = inIsDirection if inIsDirection is True else False  # 방향성 여부 (기본값: False)
        
        # 길이 일치 확인 (Descriptions)
        if len(self._descriptions) < len(self._predefinedValues):
            self._descriptions.extend([""] * (len(self._predefinedValues) - len(self._descriptions)))
        elif len(self._descriptions) > len(self._predefinedValues):
            self._descriptions = self._descriptions[:len(self._predefinedValues)]

        # 길이 일치 확인 (Korean Descriptions)
        if len(self._koreanDescriptions) < len(self._predefinedValues):
            self._koreanDescriptions.extend([""] * (len(self._predefinedValues) - len(self._koreanDescriptions)))
        elif len(self._koreanDescriptions) > len(self._predefinedValues):
            self._koreanDescriptions = self._koreanDescriptions[:len(self._predefinedValues)]
        
        # 타입에 따른 기본 값 설정
        self._initialize_type_defaults()
        self._update_weights()
    
    def _initialize_type_defaults(self):
        """타입에 따른 기본 설정을 초기화합니다."""
        if self._type == NamePartType.INDEX:
            # Index 타입은 숫자만 처리하므로 predefined values는 사용하지 않음
            self._predefinedValues = []
            self._descriptions = []
            self._koreanDescriptions = [] # Clear korean descriptions
            self._weights = []
        elif self._type == NamePartType.REALNAME:
            # RealName 타입은 predefined values를 사용하지 않음
            self._predefinedValues = []
            self._descriptions = []
            self._koreanDescriptions = [] # Clear korean descriptions
            self._weights = []
    
    def _update_weights(self):
        """
        predefined values의 순서에 따라 자동으로 가중치를 설정합니다.
        값들은 5부터 시작해서 5씩 증가하는 가중치를 갖습니다.
        """
        # REALNAME이나 INDEX 타입인 경우 weights를 사용하지 않음
        if self._type == NamePartType.REALNAME or self._type == NamePartType.INDEX:
            self._weights = []
            return
            
        self._weights = []
        # 가중치는 5부터 시작해서 5씩 증가 (순서대로 내림차순 가중치)
        num_values = len(self._predefinedValues)
        for i in range(num_values):
            weight_value = 5 * (i + 1)  # 내림차순 가중치
            self._weights.append(weight_value)
    
    def set_name(self, inName):
        """
        이름 부분의 이름을 설정합니다.
        
        Args:
            inName: 설정할 이름
        """
        self._name = inName
    
    def get_name(self):
        """
        이름 부분의 이름을 반환합니다.
        
        Returns:
            이름 부분의 이름
        """
        return self._name
    
    def set_type(self, inType):
        """
        이름 부분의 타입을 설정합니다.
        
        Args:
            inType: 설정할 타입 (NamePartType 열거형 값)
        """
        self._type = inType
        self._initialize_type_defaults()
        self._update_weights()
    
    def get_type(self):
        """
        이름 부분의 타입을 반환합니다.
        
        Returns:
            이름 부분의 타입 (NamePartType 열거형 값)
        """
        return self._type
    
    def is_prefix(self):
        """
        이름 부분이 PREFIX 타입인지 확인합니다.
        
        Returns:
            PREFIX 타입이면 True, 아니면 False
        """
        return self._type == NamePartType.PREFIX
    
    def is_suffix(self):
        """
        이름 부분이 SUFFIX 타입인지 확인합니다.
        
        Returns:
            SUFFIX 타입이면 True, 아니면 False
        """
        return self._type == NamePartType.SUFFIX
    
    def is_realname(self):
        """
        이름 부분이 REALNAME 타입인지 확인합니다.
        
        Returns:
            REALNAME 타입이면 True, 아니면 False
        """
        return self._type == NamePartType.REALNAME
    
    def is_index(self):
        """
        이름 부분이 INDEX 타입인지 확인합니다.
        
        Returns:
            INDEX 타입이면 True, 아니면 False
        """
        return self._type == NamePartType.INDEX
    
    def add_predefined_value(self, inValue, inDescription="", inKoreanDescription=""):
        """
        사전 선언된 값 목록에 새 값을 추가합니다.
        
        Args:
            inValue: 추가할 값
            inDescription: 추가할 값에 대한 설명 (기본값: 빈 문자열)
            inKoreanDescription: 추가할 값에 대한 한국어 설명 (기본값: 빈 문자열)
            
        Returns:
            추가 성공 여부 (이미 존재하는 경우 False)
        """
        # REALNAME이나 INDEX 타입인 경우 predefined values를 사용하지 않음
        if self._type == NamePartType.REALNAME or self._type == NamePartType.INDEX:
            return False
            
        if inValue not in self._predefinedValues:
            self._predefinedValues.append(inValue)
            self._descriptions.append(inDescription)
            self._koreanDescriptions.append(inKoreanDescription) # Add korean description
            self._update_weights()  # 가중치 자동 업데이트
            return True
        return False
    
    def remove_predefined_value(self, inValue):
        """
        사전 선언된 값 목록에서 값을 제거합니다.
        
        Args:
            inValue: 제거할 값
            
        Returns:
            제거 성공 여부 (존재하지 않는 경우 False)
        """
        if inValue in self._predefinedValues:
            index = self._predefinedValues.index(inValue)
            self._predefinedValues.remove(inValue)
            self._descriptions.pop(index)
            self._koreanDescriptions.pop(index) # Remove korean description
            if index < len(self._weights):
                self._weights.pop(index)
            self._update_weights()  # 가중치 자동 업데이트
            return True
        return False
    
    def set_predefined_values(self, inValues, inDescriptions=None, inKoreanDescriptions=None):
        """
        사전 선언된 값 목록을 설정합니다.
        
        Args:
            inValues: 설정할 값 목록
            inDescriptions: 설정할 값들의 설명 목록 (기본값: None, 빈 문자열로 초기화)
            inKoreanDescriptions: 설정할 값들의 한국어 설명 목록 (기본값: None, 빈 문자열로 초기화)
        """
        # REALNAME이나 INDEX 타입인 경우 predefined values를 사용하지 않음
        if self._type == NamePartType.REALNAME or self._type == NamePartType.INDEX:
            return
            
        self._predefinedValues = inValues.copy() if inValues else []
        
        # 설명 세팅
        if inDescriptions:
            self._descriptions = inDescriptions.copy()
            # 길이 일치 확인
            if len(self._descriptions) < len(self._predefinedValues):
                self._descriptions.extend([""] * (len(self._predefinedValues) - len(self._descriptions)))
            elif len(self._descriptions) > len(self._predefinedValues):
                self._descriptions = self._descriptions[:len(self._predefinedValues)]
        else:
            self._descriptions = [""] * len(self._predefinedValues)

        # 한국어 설명 세팅
        if inKoreanDescriptions:
            self._koreanDescriptions = inKoreanDescriptions.copy()
            # 길이 일치 확인
            if len(self._koreanDescriptions) < len(self._predefinedValues):
                self._koreanDescriptions.extend([""] * (len(self._predefinedValues) - len(self._koreanDescriptions)))
            elif len(self._koreanDescriptions) > len(self._predefinedValues):
                self._koreanDescriptions = self._koreanDescriptions[:len(self._predefinedValues)]
        else:
            self._koreanDescriptions = [""] * len(self._predefinedValues)
        
        # 가중치 자동 업데이트
        self._update_weights()
    
    def get_predefined_values(self):
        """
        사전 선언된 값 목록을 반환합니다.
        
        Returns:
            사전 선언된 값 목록
        """
        return self._predefinedValues.copy()
    
    def contains_value(self, inValue):
        """
        특정 값이 사전 선언된 값 목록에 있는지 확인합니다.
        
        Args:
            inValue: 확인할 값
            
        Returns:
            값이 존재하면 True, 아니면 False
        """
        # INDEX 타입인 경우 숫자인지 확인
        if self._type == NamePartType.INDEX:
            return isinstance(inValue, str) and inValue.isdigit()
            
        return inValue in self._predefinedValues
    
    def get_value_at_index(self, inIndex):
        """
        지정된 인덱스의 사전 선언된 값을 반환합니다.
        
        Args:
            inIndex: 값의 인덱스
            
        Returns:
            값 (인덱스가 범위를 벗어나면 None)
        """
        if 0 <= inIndex < len(self._predefinedValues):
            return self._predefinedValues[inIndex]
        return None
    
    def get_value_count(self):
        """
        사전 선언된 값의 개수를 반환합니다.
        
        Returns:
            값 개수
        """
        return len(self._predefinedValues)
    
    def clear_predefined_values(self):
        """
        모든 사전 선언된 값을 제거합니다.
        """
        # REALNAME이나 INDEX 타입인 경우 아무것도 하지 않음
        if self._type == NamePartType.REALNAME or self._type == NamePartType.INDEX:
            return
            
        self._predefinedValues.clear()
        self._descriptions.clear()
        self._koreanDescriptions.clear() # Clear korean descriptions
        self._weights.clear()  # 가중치도 초기화
    
    # 가중치 매핑 관련 메서드들
    
    def get_value_by_weight(self, inRank=0):
        returnStr = ""
        if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
            return returnStr
        foundIndex = self._weights.index(inRank)
        returnStr = self._predefinedValues[foundIndex] if foundIndex >= 0 else self._predefinedValues[0]
        
        return returnStr
    
    def get_most_different_weight_value(self, inValue):
        """
        주어진 값의 가중치와 가장 차이가 큰 값을 반환합니다.
        
        Args:
            inValue: 기준이 되는 값
            
        Returns:
            가중치 차이가 가장 큰 값, 없으면 빈 문자열
        """
        if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
            return ""
            
        if inValue not in self._predefinedValues:
            return ""
            
        # 값의 가중치 가져오기
        index = self._predefinedValues.index(inValue)
        currentWeight = self._weights[index]
            
        maxDiff = -1
        maxDiffValue = ""
        
        # 가중치 차이가 가장 큰 값 찾기
        for i, predValue in enumerate(self._predefinedValues):
            if predValue == inValue:
                continue
                
            predWeight = self._weights[i] if i < len(self._weights) else 0
            diff = abs(currentWeight - predWeight)
            if diff > maxDiff:
                maxDiff = diff
                maxDiffValue = predValue
                
        return maxDiffValue
    
    def get_value_by_min_weight(self):
        """
        가중치가 가장 낮은 값을 반환합니다.
        
        Returns:
            가중치가 가장 낮은 값, 없으면 빈 문자열
        """
        if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
            return ""
        return self._predefinedValues[0]
    
    def get_value_by_max_weight(self):
        """
        가중치가 가장 높은 값을 반환합니다.
        
        Returns:
            가중치가 가장 높은 값, 없으면 빈 문자열
        """
        if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
            return ""
        return self._predefinedValues[-1]
    
    def validate_value(self, inValue):
        """
        값이 이 NamePart 타입에 유효한지 검증합니다.
        
        Args:
            inValue: 검증할 값
            
        Returns:
            유효하면 True, 아니면 False
        """
        # INDEX 타입은 숫자 문자열만 유효
        if self._type == NamePartType.INDEX:
            return isinstance(inValue, str) and inValue.isdigit()
            
        # PREFIX와 SUFFIX 타입은 predefined values 중 하나여야 함
        if (self._type == NamePartType.PREFIX or self._type == NamePartType.SUFFIX) and self._predefinedValues:
            return inValue in self._predefinedValues
            
        # REALNAME 타입은 모든 문자열 유효
        if self._type == NamePartType.REALNAME:
            return isinstance(inValue, str)
            
        # 정의되지 않은 타입이면 기존 동작대로 처리
        return True
    
    # 추가: 설명 관련 메서드들
    
    def set_description(self, inValue, inDescription):
        """
        특정 predefined value의 설명을 설정합니다.
        
        Args:
            inValue: 설명을 설정할 값
            inDescription: 설정할 설명
            
        Returns:
            설정 성공 여부 (값이 존재하지 않는 경우 False)
        """
        if inValue in self._predefinedValues:
            index = self._predefinedValues.index(inValue)
            self._descriptions[index] = inDescription
            return True
        return False
    
    def get_description_by_value(self, inValue):
        """
        특정 predefined value의 설명을 반환합니다.
        
        Args:
            inValue: 설명을 가져올 값
            
        Returns:
            해당 값의 설명, 값이 존재하지 않으면 빈 문자열
        """
        if inValue in self._predefinedValues:
            index = self._predefinedValues.index(inValue)
            return self._descriptions[index]
        return ""
    
    def get_descriptions(self):
        """
        모든 설명을 반환합니다.
        
        Returns:
            설명 목록
        """
        return self._descriptions.copy()
    
    def get_value_by_description(self, inDescription):
        """
        특정 설명에 해당하는 값을 반환합니다.
        
        Args:
            inDescription: 찾을 설명
            
        Returns:
            해당 설명의 값, 없으면 빈 문자열
        """
        if inDescription in self._descriptions:
            index = self._descriptions.index(inDescription)
            return self._predefinedValues[index]
        return ""
    
    def get_value_with_description(self, inIndex):
        """
        지정된 인덱스의 값과 설명을 튜플로 반환합니다.
        
        Args:
            inIndex: 값의 인덱스
            
        Returns:
            (값, 설명) 튜플, 인덱스가 범위를 벗어나면 (None, None)
        """
        if 0 <= inIndex < len(self._predefinedValues):
            return (self._predefinedValues[inIndex], self._descriptions[inIndex])
        return (None, None)
    
    def get_values_with_descriptions(self):
        """
        모든 값과 설명의 튜플 리스트를 반환합니다.
        
        Returns:
            (값, 설명) 튜플의 리스트
        """
        return list(zip(self._predefinedValues, self._descriptions))

    # 추가: 한국어 설명 관련 메서드들
    
    def set_korean_description(self, inValue, inKoreanDescription):
        """
        특정 predefined value의 한국어 설명을 설정합니다.
        
        Args:
            inValue: 설명을 설정할 값
            inKoreanDescription: 설정할 한국어 설명
            
        Returns:
            설정 성공 여부 (값이 존재하지 않는 경우 False)
        """
        if inValue in self._predefinedValues:
            index = self._predefinedValues.index(inValue)
            self._koreanDescriptions[index] = inKoreanDescription
            return True
        return False
    
    def get_korean_description_by_value(self, inValue):
        """
        특정 predefined value의 한국어 설명을 반환합니다.
        
        Args:
            inValue: 설명을 가져올 값
            
        Returns:
            해당 값의 한국어 설명, 값이 존재하지 않으면 빈 문자열
        """
        if inValue in self._predefinedValues:
            index = self._predefinedValues.index(inValue)
            return self._koreanDescriptions[index]
        return ""
    
    def get_korean_descriptions(self):
        """
        모든 한국어 설명을 반환합니다.
        
        Returns:
            한국어 설명 목록
        """
        return self._koreanDescriptions.copy()
    
    def get_value_by_korean_description(self, inKoreanDescription):
        """
        특정 한국어 설명에 해당하는 값을 반환합니다.
        
        Args:
            inKoreanDescription: 찾을 한국어 설명
            
        Returns:
            해당 설명의 값, 없으면 빈 문자열
        """
        if inKoreanDescription in self._koreanDescriptions:
            index = self._koreanDescriptions.index(inKoreanDescription)
            return self._predefinedValues[index]
        return ""
    
    def get_value_with_korean_description(self, inIndex):
        """
        지정된 인덱스의 값과 한국어 설명을 튜플로 반환합니다.
        
        Args:
            inIndex: 값의 인덱스
            
        Returns:
            (값, 한국어 설명) 튜플, 인덱스가 범위를 벗어나면 (None, None)
        """
        if 0 <= inIndex < len(self._predefinedValues):
            return (self._predefinedValues[inIndex], self._koreanDescriptions[inIndex])
        return (None, None)
    
    def get_values_with_korean_descriptions(self):
        """
        모든 값과 한국어 설명의 튜플 리스트를 반환합니다.
        
        Returns:
            (값, 한국어 설명) 튜플의 리스트
        """
        return list(zip(self._predefinedValues, self._koreanDescriptions))
    
    def is_direction(self):
        """
        방향성 여부를 반환합니다.
        
        Returns:
            방향성 여부 (True/False)
        """
        return self._isDirection
    
    def to_dict(self):
        """
        NamePart 객체를 사전 형태로 변환합니다.
        
        Returns:
            사전 형태의 NamePart 정보
        """
        return {
            "name": self._name,
            "predefinedValues": self._predefinedValues.copy(),
            "weights": self._weights.copy(),  # 가중치를 리스트 형태로 직접 전달
            "type": self._type.name if hasattr(self._type, 'name') else str(self._type),
            "descriptions": self._descriptions.copy(),
            "koreanDescriptions": self._koreanDescriptions.copy(), # Add korean descriptions
            "isDirection": self._isDirection
        }
    
    @staticmethod
    def from_dict(inData):
        """
        사전 형태의 데이터로부터 NamePart 객체를 생성합니다.
        
        Args:
            inData: 사전 형태의 NamePart 정보
            
        Returns:
            NamePart 객체
        """
        if isinstance(inData, dict) and "name" in inData:
            # 타입 변환 (문자열 -> NamePartType 열거형)
            type_str = inData.get("type", "UNDEFINED")
            try:
                part_type = NamePartType[type_str] if isinstance(type_str, str) else NamePartType.UNDEFINED
            except KeyError:
                part_type = NamePartType.UNDEFINED
                
            result = NamePart(
                inData["name"],
                part_type,  # 두 번째 인자로 타입 전달
                inData.get("predefinedValues", []),  # 세 번째 인자로 predefinedValues 전달
                inData.get("descriptions", []),  # 네 번째 인자로 descriptions 전달
                inData.get("isDirection", False),  # 다섯 번째 인자로 isDirection 전달
                inData.get("koreanDescriptions", []) # 여섯 번째 인자로 koreanDescriptions 전달
            )
            
            return result
        return NamePart()

이름 부분(name part)을 관리하기 위한 클래스. 이름과 해당 부분에 대한 사전 선언된 값들을 관리합니다.

NamePart 클래스 초기화

Args

inName
이름 부분의 이름 (예: "Base", "Type", "Side" 등)
inPredefinedValues
사전 선언된 값 목록 (기본값: None, 빈 리스트로 초기화)
inType
NamePart의 타입 (NamePartType 열거형 값)
inDescriptions
사전 선언된 값들의 설명 목록 (기본값: None, 빈 리스트로 초기화)
inIsDirection
방향성 여부 (기본값: False)
inKoreanDescriptions
사전 선언된 값들의 한국어 설명 목록 (기본값: None, 빈 리스트로 초기화)

Static methods

def from_dict(inData)
Expand source code
@staticmethod
def from_dict(inData):
    """
    사전 형태의 데이터로부터 NamePart 객체를 생성합니다.
    
    Args:
        inData: 사전 형태의 NamePart 정보
        
    Returns:
        NamePart 객체
    """
    if isinstance(inData, dict) and "name" in inData:
        # 타입 변환 (문자열 -> NamePartType 열거형)
        type_str = inData.get("type", "UNDEFINED")
        try:
            part_type = NamePartType[type_str] if isinstance(type_str, str) else NamePartType.UNDEFINED
        except KeyError:
            part_type = NamePartType.UNDEFINED
            
        result = NamePart(
            inData["name"],
            part_type,  # 두 번째 인자로 타입 전달
            inData.get("predefinedValues", []),  # 세 번째 인자로 predefinedValues 전달
            inData.get("descriptions", []),  # 네 번째 인자로 descriptions 전달
            inData.get("isDirection", False),  # 다섯 번째 인자로 isDirection 전달
            inData.get("koreanDescriptions", []) # 여섯 번째 인자로 koreanDescriptions 전달
        )
        
        return result
    return NamePart()

사전 형태의 데이터로부터 NamePart 객체를 생성합니다.

Args

inData
사전 형태의 NamePart 정보

Returns

NamePart 객체

Methods

def add_predefined_value(self, inValue, inDescription='', inKoreanDescription='')
Expand source code
def add_predefined_value(self, inValue, inDescription="", inKoreanDescription=""):
    """
    사전 선언된 값 목록에 새 값을 추가합니다.
    
    Args:
        inValue: 추가할 값
        inDescription: 추가할 값에 대한 설명 (기본값: 빈 문자열)
        inKoreanDescription: 추가할 값에 대한 한국어 설명 (기본값: 빈 문자열)
        
    Returns:
        추가 성공 여부 (이미 존재하는 경우 False)
    """
    # REALNAME이나 INDEX 타입인 경우 predefined values를 사용하지 않음
    if self._type == NamePartType.REALNAME or self._type == NamePartType.INDEX:
        return False
        
    if inValue not in self._predefinedValues:
        self._predefinedValues.append(inValue)
        self._descriptions.append(inDescription)
        self._koreanDescriptions.append(inKoreanDescription) # Add korean description
        self._update_weights()  # 가중치 자동 업데이트
        return True
    return False

사전 선언된 값 목록에 새 값을 추가합니다.

Args

inValue
추가할 값
inDescription
추가할 값에 대한 설명 (기본값: 빈 문자열)
inKoreanDescription
추가할 값에 대한 한국어 설명 (기본값: 빈 문자열)

Returns

추가 성공 여부 (이미 존재하는 경우 False)

def clear_predefined_values(self)
Expand source code
def clear_predefined_values(self):
    """
    모든 사전 선언된 값을 제거합니다.
    """
    # REALNAME이나 INDEX 타입인 경우 아무것도 하지 않음
    if self._type == NamePartType.REALNAME or self._type == NamePartType.INDEX:
        return
        
    self._predefinedValues.clear()
    self._descriptions.clear()
    self._koreanDescriptions.clear() # Clear korean descriptions
    self._weights.clear()  # 가중치도 초기화

모든 사전 선언된 값을 제거합니다.

def contains_value(self, inValue)
Expand source code
def contains_value(self, inValue):
    """
    특정 값이 사전 선언된 값 목록에 있는지 확인합니다.
    
    Args:
        inValue: 확인할 값
        
    Returns:
        값이 존재하면 True, 아니면 False
    """
    # INDEX 타입인 경우 숫자인지 확인
    if self._type == NamePartType.INDEX:
        return isinstance(inValue, str) and inValue.isdigit()
        
    return inValue in self._predefinedValues

특정 값이 사전 선언된 값 목록에 있는지 확인합니다.

Args

inValue
확인할 값

Returns

값이 존재하면 True, 아니면 False

def get_description_by_value(self, inValue)
Expand source code
def get_description_by_value(self, inValue):
    """
    특정 predefined value의 설명을 반환합니다.
    
    Args:
        inValue: 설명을 가져올 값
        
    Returns:
        해당 값의 설명, 값이 존재하지 않으면 빈 문자열
    """
    if inValue in self._predefinedValues:
        index = self._predefinedValues.index(inValue)
        return self._descriptions[index]
    return ""

특정 predefined value의 설명을 반환합니다.

Args

inValue
설명을 가져올 값

Returns

해당 값의 설명, 값이 존재하지 않으면 빈 문자열

def get_descriptions(self)
Expand source code
def get_descriptions(self):
    """
    모든 설명을 반환합니다.
    
    Returns:
        설명 목록
    """
    return self._descriptions.copy()

모든 설명을 반환합니다.

Returns

설명 목록

def get_korean_description_by_value(self, inValue)
Expand source code
def get_korean_description_by_value(self, inValue):
    """
    특정 predefined value의 한국어 설명을 반환합니다.
    
    Args:
        inValue: 설명을 가져올 값
        
    Returns:
        해당 값의 한국어 설명, 값이 존재하지 않으면 빈 문자열
    """
    if inValue in self._predefinedValues:
        index = self._predefinedValues.index(inValue)
        return self._koreanDescriptions[index]
    return ""

특정 predefined value의 한국어 설명을 반환합니다.

Args

inValue
설명을 가져올 값

Returns

해당 값의 한국어 설명, 값이 존재하지 않으면 빈 문자열

def get_korean_descriptions(self)
Expand source code
def get_korean_descriptions(self):
    """
    모든 한국어 설명을 반환합니다.
    
    Returns:
        한국어 설명 목록
    """
    return self._koreanDescriptions.copy()

모든 한국어 설명을 반환합니다.

Returns

한국어 설명 목록

def get_most_different_weight_value(self, inValue)
Expand source code
def get_most_different_weight_value(self, inValue):
    """
    주어진 값의 가중치와 가장 차이가 큰 값을 반환합니다.
    
    Args:
        inValue: 기준이 되는 값
        
    Returns:
        가중치 차이가 가장 큰 값, 없으면 빈 문자열
    """
    if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
        return ""
        
    if inValue not in self._predefinedValues:
        return ""
        
    # 값의 가중치 가져오기
    index = self._predefinedValues.index(inValue)
    currentWeight = self._weights[index]
        
    maxDiff = -1
    maxDiffValue = ""
    
    # 가중치 차이가 가장 큰 값 찾기
    for i, predValue in enumerate(self._predefinedValues):
        if predValue == inValue:
            continue
            
        predWeight = self._weights[i] if i < len(self._weights) else 0
        diff = abs(currentWeight - predWeight)
        if diff > maxDiff:
            maxDiff = diff
            maxDiffValue = predValue
            
    return maxDiffValue

주어진 값의 가중치와 가장 차이가 큰 값을 반환합니다.

Args

inValue
기준이 되는 값

Returns

가중치 차이가 가장 큰 값, 없으면 빈 문자열

def get_name(self)
Expand source code
def get_name(self):
    """
    이름 부분의 이름을 반환합니다.
    
    Returns:
        이름 부분의 이름
    """
    return self._name

이름 부분의 이름을 반환합니다.

Returns

이름 부분의 이름

def get_predefined_values(self)
Expand source code
def get_predefined_values(self):
    """
    사전 선언된 값 목록을 반환합니다.
    
    Returns:
        사전 선언된 값 목록
    """
    return self._predefinedValues.copy()

사전 선언된 값 목록을 반환합니다.

Returns

사전 선언된 값 목록

def get_type(self)
Expand source code
def get_type(self):
    """
    이름 부분의 타입을 반환합니다.
    
    Returns:
        이름 부분의 타입 (NamePartType 열거형 값)
    """
    return self._type

이름 부분의 타입을 반환합니다.

Returns

이름 부분의 타입 (NamePartType 열거형 값)

def get_value_at_index(self, inIndex)
Expand source code
def get_value_at_index(self, inIndex):
    """
    지정된 인덱스의 사전 선언된 값을 반환합니다.
    
    Args:
        inIndex: 값의 인덱스
        
    Returns:
        값 (인덱스가 범위를 벗어나면 None)
    """
    if 0 <= inIndex < len(self._predefinedValues):
        return self._predefinedValues[inIndex]
    return None

지정된 인덱스의 사전 선언된 값을 반환합니다.

Args

inIndex
값의 인덱스

Returns

값 (인덱스가 범위를 벗어나면 None)

def get_value_by_description(self, inDescription)
Expand source code
def get_value_by_description(self, inDescription):
    """
    특정 설명에 해당하는 값을 반환합니다.
    
    Args:
        inDescription: 찾을 설명
        
    Returns:
        해당 설명의 값, 없으면 빈 문자열
    """
    if inDescription in self._descriptions:
        index = self._descriptions.index(inDescription)
        return self._predefinedValues[index]
    return ""

특정 설명에 해당하는 값을 반환합니다.

Args

inDescription
찾을 설명

Returns

해당 설명의 값, 없으면 빈 문자열

def get_value_by_korean_description(self, inKoreanDescription)
Expand source code
def get_value_by_korean_description(self, inKoreanDescription):
    """
    특정 한국어 설명에 해당하는 값을 반환합니다.
    
    Args:
        inKoreanDescription: 찾을 한국어 설명
        
    Returns:
        해당 설명의 값, 없으면 빈 문자열
    """
    if inKoreanDescription in self._koreanDescriptions:
        index = self._koreanDescriptions.index(inKoreanDescription)
        return self._predefinedValues[index]
    return ""

특정 한국어 설명에 해당하는 값을 반환합니다.

Args

inKoreanDescription
찾을 한국어 설명

Returns

해당 설명의 값, 없으면 빈 문자열

def get_value_by_max_weight(self)
Expand source code
def get_value_by_max_weight(self):
    """
    가중치가 가장 높은 값을 반환합니다.
    
    Returns:
        가중치가 가장 높은 값, 없으면 빈 문자열
    """
    if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
        return ""
    return self._predefinedValues[-1]

가중치가 가장 높은 값을 반환합니다.

Returns

가중치가 가장 높은 값, 없으면 빈 문자열

def get_value_by_min_weight(self)
Expand source code
def get_value_by_min_weight(self):
    """
    가중치가 가장 낮은 값을 반환합니다.
    
    Returns:
        가중치가 가장 낮은 값, 없으면 빈 문자열
    """
    if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
        return ""
    return self._predefinedValues[0]

가중치가 가장 낮은 값을 반환합니다.

Returns

가중치가 가장 낮은 값, 없으면 빈 문자열

def get_value_by_weight(self, inRank=0)
Expand source code
def get_value_by_weight(self, inRank=0):
    returnStr = ""
    if len(self._predefinedValues) != len(self._weights) or len(self._predefinedValues) <= 0:
        return returnStr
    foundIndex = self._weights.index(inRank)
    returnStr = self._predefinedValues[foundIndex] if foundIndex >= 0 else self._predefinedValues[0]
    
    return returnStr
def get_value_count(self)
Expand source code
def get_value_count(self):
    """
    사전 선언된 값의 개수를 반환합니다.
    
    Returns:
        값 개수
    """
    return len(self._predefinedValues)

사전 선언된 값의 개수를 반환합니다.

Returns

값 개수

def get_value_with_description(self, inIndex)
Expand source code
def get_value_with_description(self, inIndex):
    """
    지정된 인덱스의 값과 설명을 튜플로 반환합니다.
    
    Args:
        inIndex: 값의 인덱스
        
    Returns:
        (값, 설명) 튜플, 인덱스가 범위를 벗어나면 (None, None)
    """
    if 0 <= inIndex < len(self._predefinedValues):
        return (self._predefinedValues[inIndex], self._descriptions[inIndex])
    return (None, None)

지정된 인덱스의 값과 설명을 튜플로 반환합니다.

Args

inIndex
값의 인덱스

Returns

(값, 설명) 튜플, 인덱스가 범위를 벗어나면 (None, None)

def get_value_with_korean_description(self, inIndex)
Expand source code
def get_value_with_korean_description(self, inIndex):
    """
    지정된 인덱스의 값과 한국어 설명을 튜플로 반환합니다.
    
    Args:
        inIndex: 값의 인덱스
        
    Returns:
        (값, 한국어 설명) 튜플, 인덱스가 범위를 벗어나면 (None, None)
    """
    if 0 <= inIndex < len(self._predefinedValues):
        return (self._predefinedValues[inIndex], self._koreanDescriptions[inIndex])
    return (None, None)

지정된 인덱스의 값과 한국어 설명을 튜플로 반환합니다.

Args

inIndex
값의 인덱스

Returns

(값, 한국어 설명) 튜플, 인덱스가 범위를 벗어나면 (None, None)

def get_values_with_descriptions(self)
Expand source code
def get_values_with_descriptions(self):
    """
    모든 값과 설명의 튜플 리스트를 반환합니다.
    
    Returns:
        (값, 설명) 튜플의 리스트
    """
    return list(zip(self._predefinedValues, self._descriptions))

모든 값과 설명의 튜플 리스트를 반환합니다.

Returns

(값, 설명) 튜플의 리스트

def get_values_with_korean_descriptions(self)
Expand source code
def get_values_with_korean_descriptions(self):
    """
    모든 값과 한국어 설명의 튜플 리스트를 반환합니다.
    
    Returns:
        (값, 한국어 설명) 튜플의 리스트
    """
    return list(zip(self._predefinedValues, self._koreanDescriptions))

모든 값과 한국어 설명의 튜플 리스트를 반환합니다.

Returns

(값, 한국어 설명) 튜플의 리스트

def is_direction(self)
Expand source code
def is_direction(self):
    """
    방향성 여부를 반환합니다.
    
    Returns:
        방향성 여부 (True/False)
    """
    return self._isDirection

방향성 여부를 반환합니다.

Returns

방향성 여부 (True/False)

def is_index(self)
Expand source code
def is_index(self):
    """
    이름 부분이 INDEX 타입인지 확인합니다.
    
    Returns:
        INDEX 타입이면 True, 아니면 False
    """
    return self._type == NamePartType.INDEX

이름 부분이 INDEX 타입인지 확인합니다.

Returns

INDEX 타입이면 True, 아니면 False

def is_prefix(self)
Expand source code
def is_prefix(self):
    """
    이름 부분이 PREFIX 타입인지 확인합니다.
    
    Returns:
        PREFIX 타입이면 True, 아니면 False
    """
    return self._type == NamePartType.PREFIX

이름 부분이 PREFIX 타입인지 확인합니다.

Returns

PREFIX 타입이면 True, 아니면 False

def is_realname(self)
Expand source code
def is_realname(self):
    """
    이름 부분이 REALNAME 타입인지 확인합니다.
    
    Returns:
        REALNAME 타입이면 True, 아니면 False
    """
    return self._type == NamePartType.REALNAME

이름 부분이 REALNAME 타입인지 확인합니다.

Returns

REALNAME 타입이면 True, 아니면 False

def is_suffix(self)
Expand source code
def is_suffix(self):
    """
    이름 부분이 SUFFIX 타입인지 확인합니다.
    
    Returns:
        SUFFIX 타입이면 True, 아니면 False
    """
    return self._type == NamePartType.SUFFIX

이름 부분이 SUFFIX 타입인지 확인합니다.

Returns

SUFFIX 타입이면 True, 아니면 False

def remove_predefined_value(self, inValue)
Expand source code
def remove_predefined_value(self, inValue):
    """
    사전 선언된 값 목록에서 값을 제거합니다.
    
    Args:
        inValue: 제거할 값
        
    Returns:
        제거 성공 여부 (존재하지 않는 경우 False)
    """
    if inValue in self._predefinedValues:
        index = self._predefinedValues.index(inValue)
        self._predefinedValues.remove(inValue)
        self._descriptions.pop(index)
        self._koreanDescriptions.pop(index) # Remove korean description
        if index < len(self._weights):
            self._weights.pop(index)
        self._update_weights()  # 가중치 자동 업데이트
        return True
    return False

사전 선언된 값 목록에서 값을 제거합니다.

Args

inValue
제거할 값

Returns

제거 성공 여부 (존재하지 않는 경우 False)

def set_description(self, inValue, inDescription)
Expand source code
def set_description(self, inValue, inDescription):
    """
    특정 predefined value의 설명을 설정합니다.
    
    Args:
        inValue: 설명을 설정할 값
        inDescription: 설정할 설명
        
    Returns:
        설정 성공 여부 (값이 존재하지 않는 경우 False)
    """
    if inValue in self._predefinedValues:
        index = self._predefinedValues.index(inValue)
        self._descriptions[index] = inDescription
        return True
    return False

특정 predefined value의 설명을 설정합니다.

Args

inValue
설명을 설정할 값
inDescription
설정할 설명

Returns

설정 성공 여부 (값이 존재하지 않는 경우 False)

def set_korean_description(self, inValue, inKoreanDescription)
Expand source code
def set_korean_description(self, inValue, inKoreanDescription):
    """
    특정 predefined value의 한국어 설명을 설정합니다.
    
    Args:
        inValue: 설명을 설정할 값
        inKoreanDescription: 설정할 한국어 설명
        
    Returns:
        설정 성공 여부 (값이 존재하지 않는 경우 False)
    """
    if inValue in self._predefinedValues:
        index = self._predefinedValues.index(inValue)
        self._koreanDescriptions[index] = inKoreanDescription
        return True
    return False

특정 predefined value의 한국어 설명을 설정합니다.

Args

inValue
설명을 설정할 값
inKoreanDescription
설정할 한국어 설명

Returns

설정 성공 여부 (값이 존재하지 않는 경우 False)

def set_name(self, inName)
Expand source code
def set_name(self, inName):
    """
    이름 부분의 이름을 설정합니다.
    
    Args:
        inName: 설정할 이름
    """
    self._name = inName

이름 부분의 이름을 설정합니다.

Args

inName
설정할 이름
def set_predefined_values(self, inValues, inDescriptions=None, inKoreanDescriptions=None)
Expand source code
def set_predefined_values(self, inValues, inDescriptions=None, inKoreanDescriptions=None):
    """
    사전 선언된 값 목록을 설정합니다.
    
    Args:
        inValues: 설정할 값 목록
        inDescriptions: 설정할 값들의 설명 목록 (기본값: None, 빈 문자열로 초기화)
        inKoreanDescriptions: 설정할 값들의 한국어 설명 목록 (기본값: None, 빈 문자열로 초기화)
    """
    # REALNAME이나 INDEX 타입인 경우 predefined values를 사용하지 않음
    if self._type == NamePartType.REALNAME or self._type == NamePartType.INDEX:
        return
        
    self._predefinedValues = inValues.copy() if inValues else []
    
    # 설명 세팅
    if inDescriptions:
        self._descriptions = inDescriptions.copy()
        # 길이 일치 확인
        if len(self._descriptions) < len(self._predefinedValues):
            self._descriptions.extend([""] * (len(self._predefinedValues) - len(self._descriptions)))
        elif len(self._descriptions) > len(self._predefinedValues):
            self._descriptions = self._descriptions[:len(self._predefinedValues)]
    else:
        self._descriptions = [""] * len(self._predefinedValues)

    # 한국어 설명 세팅
    if inKoreanDescriptions:
        self._koreanDescriptions = inKoreanDescriptions.copy()
        # 길이 일치 확인
        if len(self._koreanDescriptions) < len(self._predefinedValues):
            self._koreanDescriptions.extend([""] * (len(self._predefinedValues) - len(self._koreanDescriptions)))
        elif len(self._koreanDescriptions) > len(self._predefinedValues):
            self._koreanDescriptions = self._koreanDescriptions[:len(self._predefinedValues)]
    else:
        self._koreanDescriptions = [""] * len(self._predefinedValues)
    
    # 가중치 자동 업데이트
    self._update_weights()

사전 선언된 값 목록을 설정합니다.

Args

inValues
설정할 값 목록
inDescriptions
설정할 값들의 설명 목록 (기본값: None, 빈 문자열로 초기화)
inKoreanDescriptions
설정할 값들의 한국어 설명 목록 (기본값: None, 빈 문자열로 초기화)
def set_type(self, inType)
Expand source code
def set_type(self, inType):
    """
    이름 부분의 타입을 설정합니다.
    
    Args:
        inType: 설정할 타입 (NamePartType 열거형 값)
    """
    self._type = inType
    self._initialize_type_defaults()
    self._update_weights()

이름 부분의 타입을 설정합니다.

Args

inType
설정할 타입 (NamePartType 열거형 값)
def to_dict(self)
Expand source code
def to_dict(self):
    """
    NamePart 객체를 사전 형태로 변환합니다.
    
    Returns:
        사전 형태의 NamePart 정보
    """
    return {
        "name": self._name,
        "predefinedValues": self._predefinedValues.copy(),
        "weights": self._weights.copy(),  # 가중치를 리스트 형태로 직접 전달
        "type": self._type.name if hasattr(self._type, 'name') else str(self._type),
        "descriptions": self._descriptions.copy(),
        "koreanDescriptions": self._koreanDescriptions.copy(), # Add korean descriptions
        "isDirection": self._isDirection
    }

NamePart 객체를 사전 형태로 변환합니다.

Returns

사전 형태의 NamePart 정보

def validate_value(self, inValue)
Expand source code
def validate_value(self, inValue):
    """
    값이 이 NamePart 타입에 유효한지 검증합니다.
    
    Args:
        inValue: 검증할 값
        
    Returns:
        유효하면 True, 아니면 False
    """
    # INDEX 타입은 숫자 문자열만 유효
    if self._type == NamePartType.INDEX:
        return isinstance(inValue, str) and inValue.isdigit()
        
    # PREFIX와 SUFFIX 타입은 predefined values 중 하나여야 함
    if (self._type == NamePartType.PREFIX or self._type == NamePartType.SUFFIX) and self._predefinedValues:
        return inValue in self._predefinedValues
        
    # REALNAME 타입은 모든 문자열 유효
    if self._type == NamePartType.REALNAME:
        return isinstance(inValue, str)
        
    # 정의되지 않은 타입이면 기존 동작대로 처리
    return True

값이 이 NamePart 타입에 유효한지 검증합니다.

Args

inValue
검증할 값

Returns

유효하면 True, 아니면 False

class NamePartType (*args, **kwds)
Expand source code
class NamePartType(Enum):
    """
    이름 부분(name part)의 유형을 정의하는 열거형 클래스.
    
    - PREFIX: RealName 앞에 오는 부분, 사전 정의 값 필수
    - SUFFIX: RealName 뒤에 오는 부분, 사전 정의 값 필수
    - REALNAME: 실제 이름 부분, 자유 텍스트 가능
    - INDEX: 숫자만 허용되는 부분
    - UNDEFINED: 정의되지 않은 타입 (기본값)
    """
    PREFIX = auto()
    SUFFIX = auto()
    REALNAME = auto()
    INDEX = auto()
    UNDEFINED = auto()

이름 부분(name part)의 유형을 정의하는 열거형 클래스.

  • PREFIX: RealName 앞에 오는 부분, 사전 정의 값 필수
  • SUFFIX: RealName 뒤에 오는 부분, 사전 정의 값 필수
  • REALNAME: 실제 이름 부분, 자유 텍스트 가능
  • INDEX: 숫자만 허용되는 부분
  • UNDEFINED: 정의되지 않은 타입 (기본값)

Ancestors

  • enum.Enum

Class variables

var INDEX

The type of the None singleton.

var PREFIX

The type of the None singleton.

var REALNAME

The type of the None singleton.

var SUFFIX

The type of the None singleton.

var UNDEFINED

The type of the None singleton.