파이썬으로 형태소 분석하기

마현우·2024년 4월 16일

코사인 유사도란?

내적공간의 두 벡터간 각도의 코사인값을 이용하여 측정된 벡터간의 유사한 정도를 의미한다

형태소 분석이란?

주어진 언어 문장에서 구조를 파악하고, 문장 분할, 분석, 추출, 원형 복원을 거쳐 의미를 갖는 최소 단위인 형태소(morphemes)를 발굴해 내는 과정.

Okt를 이용해서 형태소 분석하기

// A
원장은 국회의 동의를 얻어 대통령이 임명하고. 국민의 자유와 권리는 헌법에 열거되지 아니한 이유로 경시되지 아니한다. 복수정당제는 보장된다. 모든 국민은 직업선택의 자유를 가진다.  행정각부의 설치·조직과 직무범위는 법률로 정한다, 정당의 목적이나 활동이 민주적 기본질서에 위배될 때에는 정부는 헌법재판소에 그 해산을 제소할 수 있고. 국가원로자문회의의 조직·직무범위 기타 필요한 사항은 법률로 정한다, 법률이 정하는 바에 의하여 연임할 수 있다.  국민경제의 발전을 위한 중요정책의 수립에 관하여 대통령의 자문에 응하기 위하여 국민경제자문회의를 둘 수 있다. 종교와 정치는 분리된다. 대통령은 내우·외환·천재·지변 또는 중대한 재정·경제상의 위기에 있어서 국가의 안전보장 또는 공공의 안녕질서를 유지하기 위하여 긴급한 조치가 필요하고 국회의 집회를 기다릴 여유가 없을 때에 한하여 최소한으로 필요한 재정·경제상의 처분을 하거나 이에 관하여 법률의 효력을 가지는 명령을 발할 수 있다, 행정각부의 장은 국무위원 중에서 국무총리의 제청으로 대통령이 임명한다.  헌법재판소는 법률에 저촉되지 아니하는 범위안에서 심판에 관한 절차. 모든 국민은 종교의 자유를 가진다. 법률이 정하는 바에 의하여 최저임금제를 시행하여야 한다. 국회의원은 현행범인인 경우를 제외하고는 회기중 국회의 동의없이 체포 또는 구금되지 아니한다.  국회는 정부의 동의없이 정부가 제출한 지출예산 각항의 금액을 증가하거나 새 비목을 설치할 수 없다. 타인의 범죄행위로 인하여 생명·신체에 대한 피해를 받은 국민은 법률이 정하는 바에 의하여 국가로부터 구조를 받을 수 있다. 국토와 자원은 국가의 보호를 받으며, 형사피고인이 스스로 변호인을 구할 수 없을 때에는 법률이 정하는 바에 의하여 국가가 변호인을 붙인다.  국회는 법률에 저촉되지 아니하는 범위안에서 의사와 내부규율에 관한 규칙을 제정할 수 있다. 국회의원이 회기전에 체포 또는 구금된 때에는 현행범인이 아닌 한 국회의 요구가 있으면 회기중 석방된다. 대통령이 궐위되거나 사고로 인하여 직무를 수행할 수 없을 때에는 국무총리, 행정심판의 절차는 법률로 정하되.  대통령은 법률에서 구체적으로 범위를 정하여 위임받은 사항과 법률을 집행하기 위하여 필요한 사항에 관하여 대통령령을 발할 수 있다. 국가는 사회적·경제적 방법으로 근로자의 고용의 증진과 적정임금의 보장에 노력하여야 하며. 국회는 국무총리 또는 국무위원의 해임을 대통령에게 건의할 수 있다. 국가는 청원에 대하여 심사할 의무를 진다.  모든 국민은 인간다운 생활을 할 권리를 가진다. 선거에 있어서 최고득표자가 2인 이상인 때에는 국회의 재적의원 과반수가 출석한 공개회의에서 다수표를 얻은 자를 당선자로 한다. 그 정치적 중립성은 준수된다. 국회의 폐회중에도 또한 같다.  모든 국민은 법률이 정하는 바에 의하여 납세의 의무를 진다. 헌법개정안이 제2항의 찬성을 얻은 때에는 헌법개정은 확정되며, 이 경우 그 명령에 의하여 개정 또는 폐지되었던 법률은 그 명령이 승인을 얻지 못한 때부터 당연히 효력을 회복한다. 이 경우 그 명령에 의하여 개정 또는 폐지되었던 법률은 그 명령이 승인을 얻지 못한 때부터 당연히 효력을 회복한다.  이 헌법시행 당시의 법령과 조약은 이 헌법에 위배되지 아니하는 한 그 효력을 지속한다. 사형을 선고한 경우에는 그러하지 아니하다. 사영기업을 국유 또는 공유로 이전하거나 그 경영을 통제 또는 관리할 수 없다, 주권의 제약에 관한 조약.

// B
모든 국민은 고문을 받지 아니하며. 탄핵결정은 공직으로부터 파면함에 그친다. 제한하는 경우에도 자유와 권리의 본질적인 내용을 침해할 수 없다, 어떠한 형태로도 이를 창설할 수 없다.  사법절차가 준용되어야 한다. 국무총리 또는 국무위원이 출석요구를 받은 때에는 국무위원 또는 정부위원으로 하여금 출석·답변하게 할 수 있다. 우호통상항해조약, 정당한 보상을 지급하여야 한다.  국가원로자문회의의 조직·직무범위 기타 필요한 사항은 법률로 정한다. 제2항의 재판관중 3인은 국회에서 선출하는 자를. 대법원장과 대법관이 아닌 법관은 대법관회의의 동의를 얻어 대법원장이 임명한다. 정당해산의 결정 또는 헌법소원에 관한 인용결정을 할 때에는 재판관 6인 이상의 찬성이 있어야 한다.  그러나, 1차에 한하여 중임할 수 있다. 국회는 의장 1인과 부의장 2인을 선출한다. 법률과 적법한 절차에 의하지 아니하고는 처벌·보안처분 또는 강제노역을 받지 아니한다.  그 자율적 활동과 발전을 보장한다. 국회는 국가의 예산안을 심의·확정한다, 국회의원이 회기전에 체포 또는 구금된 때에는 현행범인이 아닌 한 국회의 요구가 있으면 회기중 석방된다. 국회의 의결은 재적의원 3분의 2 이상의 찬성을 얻어야 한다.  감사원은 세입·세출의 결산을 매년 검사하여 대통령과 차년도국회에 그 결과를 보고하여야 한다. 농지의 소작제도는 금지된다. 모든 국민은 행위시의 법률에 의하여 범죄를 구성하지 아니하는 행위로 소추되지 아니하며. 이에 의하여 민사상이나 형사상의 책임이 면제되지는 아니한다.  동일한 범죄에 대하여 거듭 처벌받지 아니한다. 이를 규제·조정할 수 있다. 모든 권력은 국민으로부터 나온다. 대통령은 헌법과 법률이 정하는 바에 의하여 국군을 통수한다.  감사원은 세입·세출의 결산을 매년 검사하여 대통령과 차년도국회에 그 결과를 보고하여야 한다. 대통령은 국가의 안위에 관계되는 중대한 교전상태에 있어서 국가를 보위하기 위하여 긴급한 조치가 필요하고 국회의 집회가 불가능한 때에 한하여 법률의 효력을 가지는 명령을 발할 수 있다. 군사법원의 조직·권한 및 재판관의 자격은 법률로 정한다, 모든 국민은 근로의 의무를 진다.  그 정치적 중립성은 준수된다. 언론·출판이 타인의 명예나 권리를 침해한 때에는 피해자는 이에 대한 피해의 배상을 청구할 수 있다. 비상계엄하의 군사재판은 군인·군무원의 범죄나 군사에 관한 간첩죄의 경우와 초병·초소·유독음식물공급·포로에 관한 죄중 법률이 정한 경우에 한하여 단심으로 할 수 있다. 모든 국민은 종교의 자유를 가진다.  중임할 수 없다. 국가는 청원에 대하여 심사할 의무를 진다, 모든 권력은 국민으로부터 나온다. 국회는 상호원조 또는 안전보장에 관한 조약.

// C
제1항의 탄핵소추는 국회재적의원 3분의 1 이상의 발의가 있어야 하며. 다만. 국가는 균형있는 국민경제의 성장 및 안정과 적정한 소득의 분배를 유지하고. 다만.  국회의원의 수는 법률로 정하되. 모든 국민은 근로의 의무를 진다. 대통령에 대한 탄핵소추는 국회재적의원 과반수의 발의와 국회재적의원 3분의 2 이상의 찬성이 있어야 한다. 사영기업을 국유 또는 공유로 이전하거나 그 경영을 통제 또는 관리할 수 없다.  국가는 사회적·경제적 방법으로 근로자의 고용의 증진과 적정임금의 보장에 노력하여야 하며. 그 임기는 4년으로 하며. 모든 국민은 근로의 권리를 가진다. 법률이 정하는 바에 의하여 최저임금제를 시행하여야 한다.  대한민국의 영토는 한반도와 그 부속도서로 한다. 종교와 정치는 분리된다. 누구든지 법률에 의하지 아니하고는 체포·구속·압수·수색 또는 심문을 받지 아니하며. 평화통일정책의 수립에 관한 대통령의 자문에 응하기 위하여 민주평화통일자문회의를 둘 수 있다.  제1항의 지시를 받은 당해 행정기관은 이에 응하여야 한다. 1차에 한하여 중임할 수 있다, 예비비는 총액으로 국회의 의결을 얻어야 한다. 모든 국민은 직업선택의 자유를 가진다.  대통령의 임기연장 또는 중임변경을 위한 헌법개정은 그 헌법개정 제안 당시의 대통령에 대하여는 효력이 없다, 국가는 사회보장·사회복지의 증진에 노력할 의무를 진다. 정부는 회계연도마다 예산안을 편성하여 회계연도 개시 90일전까지 국회에 제출하고. 국가는 건전한 소비행위를 계도하고 생산품의 품질향상을 촉구하기 위한 소비자보호운동을 법률이 정하는 바에 의하여 보장한다.  모든 국민은 신속한 재판을 받을 권리를 가진다, 정당은 헌법재판소의 심판에 의하여 해산된다, 헌법재판소에서 법률의 위헌결정. 국민의 모든 자유와 권리는 국가안전보장·질서유지 또는 공공복리를 위하여 필요한 경우에 한하여 법률로써 제한할 수 있으며.  국교는 인정되지 아니하며. 다만. 모든 국민은 법률이 정하는 바에 의하여 납세의 의무를 진다. 민주평화통일자문회의의 조직·직무범위 기타 필요한 사항은 법률로 정한다.  이에 의하여 민사상이나 형사상의 책임이 면제되지는 아니한다. 모든 국민은 거주·이전의 자유를 가진다. 다만. 대법원에 대법관을 둔다.  헌법개정안이 제2항의 찬성을 얻은 때에는 헌법개정은 확정되며. 대통령의 선거에 관한 사항은 법률로 정한다, 제5항에 의하여 법률이 확정된 후 또는 제4항에 의한 확정법률이 정부에 이송된 후 5일 이내에 대통령이 공포하지 아니할 때에는 국회의장이 이를 공포한다, 고용·임금 및 근로조건에 있어서 부당한 차별을 받지 아니한다.
from konlpy.tag import *

okt = Okt()

A = okt.nouns(input())
B = okt.nouns(input())
C = okt.nouns(input())

print(A)
print(B)
print(C)

feature = set(A+B+C)
print(feature) # {'경영', '공공', '국가', '다만', '국민', '헌법재판소', '비상계엄', '피고인', '인간', '회계', '행위', '장', '안', '죄', '정은', '군사재판', '통상', '모든', '생산품', '거나', '제', '때', '임명', '선고', '자격', '액', '이내', '분리', '강제', '집회', '사고', '중요', '건의', '자율', '심문', '사항', '변경', '의결', '폐지', '군사', '편성', '발전', '경제', '보상', '위임', '종교', '군무원', '조건', '차별', '국회의원', '내용', '경우', '못', '청구', '처분', '영토', '출석', '하의', '효력', '원장', '중립성', '출판', '당선자', '제안', '통수', '질서', '복리', '탄핵', '공직', '대한민국', '매년', '지시', '수립', '최소한', '도', '지출', '답변', '저촉', '증진', '고문', '대통령', '품질', '보장', '비비', '국유', '중임', '항해', '및', '구', '제약', '새', '범위', '이상', '예산', '보위', '목적', '임', '행정기관', '증가', '대법원', '의사', '제청', '표', '국무총리', '항', '국회', '안녕', '체포', '의원', '추', '적정', '심사', '명예', '공급', '민사', '찬성', '연도', '조직', '상태', '제한', '정책', '헌법소원', '원조', '단심', '로써', '위기', '인정', '결산', '행정각부', '연장', '직업', '자원', '헌법', '심의', '국군', '안위', '생활', '처벌', '발의', '균형', '절차', '선택', '책임', '인용', '직무', '수', '선출', '소비자보호', '세', '각항', '개정', '구조', '법률', '기전', '기업', '발', '구속', '피해', '간첩죄', '금액', '계', '음식물', '또한', '규제', '권리', '외환', '복지', '회', '선거', '시행', '인', '국무위원', '석방', '명령', '감사원', '포로', '개시', '보안처분', '평화통일', '둘', '국교', '바', '정치', '행정심판', '지급', '재정', '범죄', '유지', '의무', '구체', '수행', '노력', '상호', '부속', '초병', '사법', '창설', '법령', '압수', '규율', '그', '대하', '자유', '농지', '이유', '납세', '함', '로부터', '관계', '향상', '정당', '형태', '누구', '한반도', '준용', '수색', '폐회', '이상인', '비목', '인과', '기타', '항의', '공유', '당시', '이전', '회의', '세입', '확정', '해임', '침해', '방법', '지속', '신체', '활동', '최저임금제', '천재', '예산안', '조치', '득표', '권력', '사형', '노역', '피해자', '운동', '구금', '변', '과반수', '중', '다수', '고용', '사회보장', '임기', '대통령령', '자문', '언론', '파면', '형사', '제외', '심판', '제정', '현행범인', '보고', '민주', '상의', '관리', '사회', '이', '전하', '임금', '타인', '최고', '개정안', '정부', '의장', '조약', '관', '위', '제소', '여유', '도하', '초소', '소득', '후', '촉구', '집행', '금지', '국회의장', '안전보장', '결정', '통제', '주권', '거듭', '법관', '본질', '군인', '안정', '경시', '청원', '복수정당제', '규칙', '제출', '거주', '다운', '재판', '유독', '이송', '공개', '근로자', '정', '궐위', '정부위원', '검사', '부의', '대한', '내부', '공포', '재적', '차', '권한', '결과', '여', '군사법원', '교전', '조정', '소비', '동의', '보호', '면제', '응', '스스로', '해산', '위배', '구성', '도서', '승인', '준수', '시', '근로', '요구', '국토', '성장', '년도', '재판관', '분배', '얻지', '생명', '설치', '배상', '변호인', '대법관', '열거', '제도', '우호'}

import numpy as np
def make_vec(feature,data):
    v = []
    for f in feature:
        cnt =0
        for word in data:
            if word == f:
                cnt += 1
        v.append(cnt)
    return np.array(v)
    
va = make_vec(feature,A)
vb = make_vec(feature,B)
vc = make_vec(feature,C)

def sim(a,b):
    return a@b/(np.linalg.norm(a) * np.linalg.norm(b))
    
print('va & vb', sim(va,vb))
print('vb & vc', sim(vb,vc))
print('va & vc', sim(va,vc))

# va & vb 0.7290016046940258
# vb & vc 0.6457398469001945
# va & vc 0.7322965111023361

0개의 댓글