Package: korean-rule-helper
korean-rule-helper한국어 rule-based 처리할 때 활용할 수 있는 패키지품사 태그를 활용한 문장 구조 및 분석한국어 규칙 적용Installationdependencypython >=3.10python-mecab-ko패키지 설치(링크 참조)Usingpippip install korean-rule-helperUsage기본 구성KoreanSentenceKoreanSentence 는 문장(한국어 string)을 품사태그로 나누어서 저장합니다.fromkorean_rule_helperimportKoreanSentencesentence=KoreanSentence('나는 너를 사랑한다.')print(sentence.parsed)#[$나/NP, $는/JX, $_, $너/NP, $를/JKO, $_, $사랑/NNG, $한다($하/XSV, $ᆫ다/EF)/XSV+EF, $./SF]print(sentence.text)# 나는 너를 사랑한다.Rulerule 은 python dict 형태로 표현되며 해당하는 형태소의 품사, 표현형 등을 체크할 수 있습니다. default 값은 아래와 같습니다.classRule:surface:str|list[str]|None=Nonepos:str|list[str]|None=Nonenpos:str|list[str]|None=None# match tools from belowblank:bool=Falseoptional:bool=Falserule_default={'surface':None,# str | [str]'is_first':False,'is_last':False,# 'is_concat': False,'pos':None,# str | [str]'!pos':None,# str | [str]'return':False,}suface(str|str[]): 표현형 ex) 가방pos(str|str[]): 포함하는 품사 ex) ['NNG']npos(str|str[]]): 포함하지 않는 품사 ex) ['JX']blank(bool): argument 로 반납 여부optional(bol): match 에서 있어도 되고 없어도 되게끔 판단예시KoreanSentence의 판단 기준은 다음과 같습니다.surface -> item의 표현형이 surface 와 다르면 Falsepos -> item의 품사가 모두 겹치지 않으면 Falsenpos -> item의 품사가 하나라도 겹치면 False위의 기준을 모두 피할 경우 TrueRule 은 기본적으로 class 로 정의되어있지만 dict 또는 str 으로부터 가져올 수 있습니다.# rule from string -> surfacerule=Rule.from_str('과자')print(rule)# Rule(surface: 과자)# rule from dict -> k - v pairs matchingrule=Rule.from_dict({'pos':['N','V']})print(rule)# Rule(pos: ['N', 'V'])# rule from list of dict, str combinedrule=Rule.transform(['과자',{'pos':['N','V']}])print(rule)# [Rule(surface: 과자), Rule(pos: ['N', 'V'])]KoreanSentencefromkorean_rule_helperimportKoreanSentence,Rulereplace문장의 형태소를 조건에 맞게 변경합니다.# replacesentence=KoreanSentence('문재인은 19대 대통령이다.')rule=Rule.from_dict({'surface':'다','pos':'EF'})sentence=sentence.replace(rule,'에요')print(sentence.text)# 문재인은 19대 대통령이에요.rule=Rule.from_dict({'pos':'NNP'})sentence=sentence.replace(rule,'000')print(sentence.text)# 000은 19대 대통령이에요.strip문장의 앞 뒤 형태소를 조건에 맞게 잘라냅니다.fromkorean_rule_helperimportKoreanSentencesentence=KoreanSentence('박근혜는 18대 대통령이다.')rules=[{'surface':'.','pos':'S'},'박근혜','는']# multiple rulesentence=sentence.strip(rules)print(sentence.text)#  18대 대통령이다rule='다'# single rulesentence=sentence.strip(rule)print(sentence.text)#  18대 대통령이KoreanRuleHelpermatch문장이 형태소를 조건에 맞는 순서로 포함하고 있는지 여부를 체크합니다.fromkorean_rule_helperimportKoreanRuleHelperrh=KoreanRuleHelper()sentence=KoreanSentence('내 이름은 김치야')rule=['내','이름','은','김치야']rule=Rule.transform(rule)is_match,arg=rh.match(sentence,rule)print(is_match,arg)# True []rule=['내','이름',{'blank':True,'pos':'N'}]rule=Rule.transform(rule)is_match,arg=rh.match(sentence,rule)print(is_match,arg)# True ['김치']rule=['내',{'blank':True,'pos':'N'},'김치',{'pos':'E'}]rule=Rule.transform(rule)is_match,arg=rh.match(sentence,rule)print(is_match,arg)# True ['이름']rule=['내',{'blank':True,'pos':'N'},'고기']rule=Rule.transform(rule)is_match,arg=rh.match(sentence,rule)print(is_match,arg)# False []add_josa한국어 단어의 종성 여부에 맞추어 조사를 붙여줍니다.I_GA: 이/가
EUN_NEUN: 은/는
GWA_WA: 과/와
A_YA: 아/야
EUL_REUL: 을/를
RYUL_YUL: 률/율
EURO_RO: 으로/로
I_X: 이/''fromkorean_rule_helperimportJosaHelper# add_josajs=JosaHelper()word='설빙'josa_word=js.add_josa(word,type='EUL_REUL')print(josa_word)# 설빙을word='사과'josa_word=js.add_josa(word,type='GWA_WA')print(josa_word)# 사과와품사 태그 비교 표mecab-ko-dict의 태그를 따름(세종 품사 태그)대분류태그설명체언NNG일반 명사NNP고유 명사NNB의존 명사NR수사NP대명사용언VV동사VA형용사VX보조 용언VCP긍정 지정사VCN부정 지정사관형사MM관형사부사MAG일반 부사MAJ접속 부사감탄사IC감탄사조사JKS주격 조사JKC보격 조사JKG관형격 조사JKO목적격 조사JKB부사격 조사JKV호격 조사JKQ인용격 조사JX보조사JC접속 조사선어말 어미EP선어말 어미어말 어미EF종결 어미EC연결 어미ETN명사형 전성 어미ETM관형형 전성 어미접두사XPN체언 접두사접미사XSN명사 파생 접미사XCV동사 파생 접미사XSA형용사 파생 접미사어근XR어근부호SF마침표, 물음표, 느낌표SE줄임표 …SSO여는 괄호 (, [SSC닫는 괄호 ), ]SC구분자 , · / :SY기타 기호SL외국어SH한자SN숫자