본문 바로가기

졸업프로젝트

텍스트 전처리

저는 이번에 졸업프로젝트로 인해 "인공지능-자연어처리"를 처음 접했습니다

사실상 일상에서 굉장히 많이 사용되고 있는데 컴공과 학생으로 이 분야에 대해 처음 알았다는게 매우 당황스러웠습니다. 그래서 이번 졸업프로젝트를 통해 자연어처리부분에 대해 공부하면서 프로젝트를 진행하려고 합니다!

이 분야에 대해 많이 또 깊게 알지 못하지만 함께 공부해가며 실습하는 과정, 또 그 과정에서 겪었던 어려움들을 하나씩 포스팅해보겠습니다!


저희 프로젝트는 텍스트 속에서 문장들을 형태소 단위로 다 쪼개서 어휘들을 구분해야 하는 과정이 필요합니다.

사람이 하기에는 금방 동사, 명사 등을 구분하기 편한데 컴퓨터는 과연 잘 할 수 있을까요?

컴퓨터가 잘 할 수 있도록 저희는 "텍스트 전처리"를 통해 "용도에 맞게 텍스트를 사전에 처리하는 작업"을 해야합니다.

 

앞서 KoNLPy를 통해 형태소 분석하는 것을 잠깐 보여드렸는데요, 이번에는 텍스트 파일에 있는 문장들을 이용해 명사 토큰화를 해보겠습니다.

 

구글 코랩은 구글에서 제공하는 jupyter notebook입니다. 구글 클라우드를 기반으로 하기 때문에 개인 PC보다 좋은 성능 및 접근성을 제공하고 있습니다. 번거로운 설정 과정을 하나하나 하지 않아도 되기 때문에 사람들이 딥러닝, 머신러닝, 인공지능 분야를 학습하는데 많이 쓰이고 있습니다. 그래서 저도 주피터 노트북에서 워낙 많은 에러를 겪어 지금 코랩을 이용해서 형태소를 분석하려고 합니다!

 

Colab 또한 jupyter notebook과 사용방법은 동일합니다. 하지만 Colab은 일회성이기 때문에 다음 날 사용하시려면 저장한 코드를 다시한번 모두 실행시켜 주고 나서 진행해야 합니다.

 

 


코랩에서 새노트를 여신 후 텍스트 전처리를 할 "텍스트파일"을 메뉴-파일 부분에 옮겨줍니다! 

텍스트 파일을 마우스로 이동해서 옮기실 수 있습니다!

 

그 후 파일을 여는 코드를 입력하고 txt를 실행시키시면

텍스트 파일을 열 수 있습니다!, encoding='cp949' 부분은 입력 안하셔도 되는데 만약 텍스트 파일을 읽는 과정에서 오류가 발생하실 경우 쓰시면 됩니다!

 

코랩은 자신의 PC에서 하는 것이 아닌 구글에서 제공하는 곳에서 하는 것이기 때문에 

!apt-get update
!apt-get install g++ openjdk-8-jdk python-dev python3-dev
!pip3 install JPype1-py3
!pip3 install konlpy
!JAVA_HOME="C:\Program Files\Java\jdk-17.0.1"
 
이 코드를 꼭 작성해 실행시켜 설치를 해줘야 합니다!
!JAVA_HOME="C:\Program Files\Java\jdk-17.0.1"는 자신이 설치한 jdk파일의 이름과 파일 위치를 입력해줘야 합니다.

이렇게 쭈욱 파일들이 다운로드 되며 설치가 완료됩니다.

그 후

다음과 같이 코드를 입력합니다. konlpy 파이썬 패키지로 부터 형태소 분석기 Okt를 이용해 명사 부분만 토큰화 해보겠습니다.

noun_list 코드를 입력하고 실행시키면 
 
['세기',
 '전반',
 '서양',
 '태양',
 '중심',
 '설',
 '지구',
 '중심',
 '설',
 '대안',
 '제시',
 '시작',
 '천문학',
 '분야',
 '개혁',
 '경험',
 '주의',
 '확산',
 '수리',
 '과학',
 '발전',
 '통해',
 '형이상학',
 '뒤',
 '변혁',
 '서양',
 '우주론',
 '이',
 '전파',
 '중국',
 '중국',
 '서양',
 '우주론',
 '회통',
 '시도',
 '전개',
 '이',
 '과정',
 '자신',
 '지적',
 '유산',
 '대한',
 '관심',
 '제',
 '문제',
 '단순화',
 '수학',
 '전통',
 '코페르니쿠스',
 '천체',
 '운행',
 '기술',
 '방법',
 '그것',
 '형이상학적',
 '문제',
 '별',
 '관심',
 '고대',
 '아리스토텔레스',
 '프톨레마이오스',
 '우주',
 '중심',
 '고정',
 '움직',
 '지구',
 '주위',
 '달',
 '태양',
 '다른',
 '행성',
 '구들',
 '항성',
 '항성',
 '천구',
 '회전',
 '지구',
 '중심',
 '설',
 '내',
 '그',
 '달리',
 '코페르니쿠스',
 '태양',
 '우주',
 '중심',
 '고정',
 '그',
 '주위',
 '지구',
 '비롯',
 '행성',
 '공전',
 '지구',
 '자전',
 '우주',
 '모형',
 '프톨레마이오스',
 '수의',
 '원',
 '행성',
 '가시',
 '운동',
 '설명',
 '수',
 '행성',
 '태양',
 '공전',
 '주기',
 '점',
 '단순',
 '충족',
 '아리스토텔레스',
 '형이상학',
 '고수',
 '다수',
 '지식인',
 '종교',
 '지도자',
 '그',
 '이론',
 '그것',
 '지상계',
 '천상계',
 '대립',
 '아리스토텔레스',
 '이분법',
 '구도',
 '무너',
 '리',
 '신의',
 '형상',
 '인간',
 '한갓',
 '행성',
 '거주',
 '전락',
 '것',
 '때문',
 '세기',
 '후반',
 '브라헤',
 '코페르니쿠스',
 '천문학',
 '장점',
 '인정',
 '아리스토텔레스',
 '형이상학',
 '상충',
 '피하',
 '고자',
 '우주',
 '중심',
 '지구',
 '고정',
 '달',
 '태양',
 '항성',
 '지구',
 '주위',
 '공전',
 '지구',
 '외',
 '행성',
 '태양',
 '주위',
 '공전',
 '모형',
 '제안',
 '케플러',
 '우주',
 '적',
 '질서',
 '신봉',
 '형이상학',
 '플라톤',
 '주의',
 '매료',
 '때문',
 '태양',
 '우주',
 '중심',
 '배치',
 '단순',
 '추구',
 '코페르니쿠스',
 '천문학',
 '그',
 '경험',
 '주의자',
 '브라헤',
 '천체',
 '관측',
 '활용',
 '태양',
 '주위',
 '공전',
 '행성',
 '운동',
 '법칙',
 '수립',
 '수',
 '우주',
 '단순',
 '이',
 '법칙',
 '아리스토텔레스',
 '형이상학',
 '더',
 '이상',
 '존',
 '수',
 '세기',
 '후반',
 '뉴턴',
 '태양',
 '중심',
 '설',
 '역학',
 '정당화',
 '그',
 '만유인력',
 '가설',
 '로부터',
 '케플러',
 '행성',
 '운동',
 '법칙',
 '성공',
 '연역',
 '때',
 '가정',
 '만유인력',
 '두',
 '질점',
 '이',
 '서로',
 '힘',
 '그',
 '크기',
 '두',
 '질점',
 '질량',
 '곱',
 '비례',
 '거리',
 '제곱',
 '반비례',
 '지구',
 '포함',
 '천체',
 '밀도',
 '균질',
 '거나',
 '구',
 '대칭',
 '구라',
 '천체',
 '그',
 '천체',
 '밖',
 '질점',
 '만유인력',
 '그',
 '천체',
 '부피',
 '요소',
 '각각',
 '그',
 '천체',
 '밖',
 '질점',
 '만유인력',
 '모두',
 '구',
 '수',
 '또한',
 '여기',
 '지구',
 '질량',
 '태양',
 '지구',
 '서로',
 '만유인력',
 '서로',
 '음',
 '증명',
 '수',
 '뉴턴',
 '이',
 '원리',
 '적용',
 '달',
 '공전',
 '궤도',
 '사과',
 '낙하',
 '운동',
 '등',
 '관',
 '실',
 '값',
 '연역',
 '함',
 '만유인력',
 '실재',
 '입증',
 '세기',
 '말',
 '중국',
 '본격',
 '유입',
 '서양',
 '과학',
 '청',
 '왕조',
 '중국',
 '역법',
 '기반',
 '서양',
 '천문학',
 '모델',
 '계산법',
 '수용',
 '시헌력',
 '공식',
 '채택',
 '함',
 '그',
 '위상',
 '구체화',
 '브라헤',
 '케플러',
 '천문',
 '이론',
 '차례대로',
 '수용',
 '정확도',
 '시헌력',
 '생활',
 '리듬',
 '자리',
 '중국',
 '지식인',
 '서양',
 '과학',
 '중국',
 '지적',
 '유산',
 '연결',
 '효율',
 '더라도',
 '불온',
 '요소',
 '이',
 '서양',
 '과학',
 '매료',
 '학자',
 '방식',
 '서양',
 '과학',
 '중국',
 '전통',
 '사이',
 '관계',
 '음',
 '통해',
 '이',
 '문제',
 '해결',
 '세기',
 '웅명우',
 '방이',
 '등',
 '중국',
 '고대',
 '문헌',
 '수록',
 '우주론',
 '대해',
 '부정',
 '태도',
 '견',
 '지하',
 '면서',
 '성리학',
 '론',
 '입',
 '각하',
 '실증',
 '서양',
 '과학',
 '재',
 '해석',
 '독창',
 '이론',
 '제시',
 '수성',
 '금성',
 '태양',
 '주위',
 '회전',
 '그',
 '태양계',
 '학설',
 '브라헤',
 '영향',
 '태양',
 '크기',
 '대한',
 '서양',
 '천문학',
 '이론',
 '의문',
 '제기',
 '기',
 '빛',
 '결부',
 '제시',
 '광학',
 '이론',
 '그',
 '창안',
 '것',
 '세기',
 '후반',
 '왕석',
 '문정은',
 '서양',
 '과학',
 '영향',
 '경험',
 '추론',
 '수학',
 '계산',
 '통해',
 '우주',
 '원리',
 '파악',
 '서양',
 '과학',
 '모두',
 '중국',
 '고전',
 '것',
 '웅명우',
 '등',
 '못',
 '채',
 '성리학',
 '형이상학',
 '비판',
 '문정은',
 '고대',
 '문헌',
 '언급',
 '하늘',
 '땅',
 '네',
 '모퉁이',
 '수',
 '것',
 '증자',
 '말',
 '땅',
 '서양',
 '이론',
 '등',
 '서양',
 '과학',
 '중국',
 '원론',
 '뒷받침',
 '중국',
 '천문학',
 '중심',
 '서양',
 '천문학',
 '회통',
 '정의',
 '입장',
 '세기',
 '초',
 '기점',
 '중국',
 '공식',
 '입장',
 '채택',
 '이',
 '입장',
 '중국',
 '역대',
 '지식',
 '성과',
 '물',
 '망라',
 '총서',
 '사고전서',
 '그대로',
 '반영',
 '이',
 '총서',
 '편집자',
 '고대',
 '당시',
 '천문',
 '관련',
 '문헌',
 '정리',
 '수록',
 '이',
 '고대',
 '문헌',
 '우주론',
 '재',
 '해석',
 '확인',
 '경향',
 '세기',
 '중엽',
 '주']
 
 

이렇게 토큰화 된 것을 볼 수 있습니다!

각각 토큰화 된 명사들이 몇개인지 세어 보겠습니다.

Counter({'가설': 1, '가시': 1, '가정': 1, '각각': 1, '각하': 1, '값': 1, '개혁': 1, '거나': 1, '거리': 1, '거주': 1, '것': 4, '견': 1, '결부': 1, '경향': 1, '경험': 3, '계산': 1, '계산법': 1, '고대': 5, '고수': 1, '고자': 1, '고전': 1, '고정': 3, '곱': 1, '공식': 2, '공전': 6, '과정': 1, '과학': 9, '관': 1, '관계': 1, '관련': 1, '관심': 2, '관측': 1, '광학': 1, '구': 2, '구도': 1, '구들': 1, '구라': 1, '구체화': 1, '궤도': 1, '균질': 1, '그': 12, '그것': 2, '그대로': 1, '금성': 1, '기': 1, '기반': 1, '기술': 1, '기점': 1, '낙하': 1, '내': 1, '네': 1, '뉴턴': 2, '다른': 1, '다수': 1, '단순': 3, '단순화': 1, '달': 3, '달리': 1, '당시': 1, '대립': 1, '대안': 1, '대칭': 1, '대한': 2, '대해': 1, '더': 1, '더라도': 1, '독창': 1, '두': 2, '뒤': 1, '뒷받침': 1, '등': 4, '땅': 2, '때': 1, '때문': 2, '또한': 1, '로부터': 1, '론': 1, '리': 1, '리듬': 1, '만유인력': 6, '말': 2, '망라': 1, '매료': 2, '면서': 1, '모델': 1, '모두': 2, '모퉁이': 1, '모형': 2, '못': 1, '무너': 1, '문정은': 2, '문제': 3, '문헌': 4, '물': 1, '밀도': 1, '밖': 2, '반비례': 1, '반영': 1, '발전': 1, '방법': 1, '방식': 1, '방이': 1, '배치': 1, '법칙': 3, '변혁': 1, '별': 1, '본격': 1, '부정': 1, '부피': 1, '분야': 1, '불온': 1, '브라헤': 4, '비례': 1, '비롯': 1, '비판': 1, '빛': 1, '사고전서': 1, '사과': 1, '사이': 1, '상충': 1, '생활': 1, '서로': 3, '서양': 15, '설': 4, '설명': 1, '성공': 1, '성과': 1, '성리학': 2, '세기': 8, '수': 6, '수록': 2, '수리': 1, '수립': 1, '수성': 1, '수용': 2, '수의': 1, '수학': 2, '시도': 1, '시작': 1, '시헌력': 2, '신봉': 1, '신의': 1, '실': 1, '실재': 1, '실증': 1, '아리스토텔레스': 5, '언급': 1, '여기': 1, '역대': 1, '역법': 1, '역학': 1, '연결': 1, '연역': 2, '영향': 2, '왕석': 1, '왕조': 1, '외': 1, '요소': 2, '우주': 8, '우주론': 4, '운동': 4, '운행': 1, '움직': 1, '웅명우': 2, '원': 1, '원론': 1, '원리': 2, '위상': 1, '유산': 2, '유입': 1, '음': 2, '의문': 1, '이': 10, '이론': 6, '이분법': 1, '이상': 1, '인간': 1, '인정': 1, '입': 1, '입장': 3, '입증': 1, '자리': 1, '자신': 1, '자전': 1, '장점': 1, '재': 2, '적': 1, '적용': 1, '전개': 1, '전락': 1, '전반': 1, '전통': 2, '전파': 1, '점': 1, '정당화': 1, '정리': 1, '정의': 1, '정확도': 1, '제': 1, '제곱': 1, '제기': 1, '제시': 3, '제안': 1, '존': 1, '종교': 1, '주': 1, '주기': 1, '주위': 6, '주의': 2, '주의자': 1, '중국': 13, '중심': 9, '중엽': 1, '증명': 1, '증자': 1, '지구': 11, '지도자': 1, '지상계': 1, '지식': 1, '지식인': 2, '지적': 2, '지하': 1, '질량': 2, '질서': 1, '질점': 4, '차례대로': 1, '창안': 1, '채': 1, '채택': 2, '천구': 1, '천문': 2, '천문학': 7, '천상계': 1, '천체': 7, '청': 1, '초': 1, '총서': 2, '추구': 1, '추론': 1, '충족': 1, '케플러': 3, '코페르니쿠스': 4, '크기': 2, '태도': 1, '태양': 12, '태양계': 1, '통해': 3, '파악': 1, '편집자': 1, '포함': 1, '프톨레마이오스': 2, '플라톤': 1, '피하': 1, '하늘': 1, '학설': 1, '학자': 1, '한갓': 1, '함': 2, '항성': 3, '해결': 1, '해석': 2, '행성': 8, '형상': 1, '형이상학': 6, '형이상학적': 1, '확산': 1, '확인': 1, '활용': 1, '회전': 2, '회통': 2, '효율': 1, '후반': 3, '힘': 1})

 

각 단어에 대해 텍스트에서 얼마나 반복되게 나왔는지 알 수 있습니다.

조금 더 보기 편하게 숫자가 큰 순서대로 정렬 시키겠습니다.

 
count.most_common() 코드를 실행시키면 다음가 같은 결과를 볼 수 있습니다.
 
[('서양', 15), ('중국', 13), ('태양', 12), ('그', 12), ('지구', 11), ('이', 10), ('중심', 9), ('과학', 9), ('세기', 8), ('우주', 8), ('행성', 8), ('천문학', 7), ('천체', 7), ('형이상학', 6), ('주위', 6), ('공전', 6), ('수', 6), ('이론', 6), ('만유인력', 6), ('고대', 5), ('아리스토텔레스', 5), ('설', 4), ('우주론', 4), ('코페르니쿠스', 4), ('운동', 4), ('것', 4), ('브라헤', 4), ('질점', 4), ('등', 4), ('문헌', 4), ('제시', 3), ('경험', 3), ('통해', 3), ('문제', 3), ('고정', 3), ('달', 3), ('항성', 3), ('단순', 3), ('후반', 3), ('케플러', 3), ('법칙', 3), ('서로', 3), ('입장', 3), ('주의', 2), ('회통', 2), ('지적', 2), ('유산', 2), ('대한', 2), ('관심', 2), ('수학', 2), ('전통', 2), ('그것', 2), ('프톨레마이오스', 2), ('회전', 2), ('모형', 2), ('지식인', 2), ('때문', 2), ('매료', 2), ('뉴턴', 2), ('연역', 2), ('두', 2), ('크기', 2), ('질량', 2), ('구', 2), ('밖', 2), ('요소', 2), ('모두', 2), ('음', 2), ('원리', 2), ('함', 2), ('말', 2), ('수용', 2), ('시헌력', 2), ('공식', 2), ('채택', 2), ('천문', 2), ('웅명우', 2), ('수록', 2), ('성리학', 2), ('재', 2), ('해석', 2), ('영향', 2), ('문정은', 2), ('땅', 2), ('총서', 2), ('전반', 1), ('대안', 1), ('시작', 1), ('분야', 1), ('개혁', 1), ('확산', 1), ('수리', 1), ('발전', 1), ('뒤', 1), ('변혁', 1), ('전파', 1), ('시도', 1), ('전개', 1), ('과정', 1), ('자신', 1), ('제', 1), ('단순화', 1), ('운행', 1), ('기술', 1), ('방법', 1), ('형이상학적', 1), ('별', 1), ('움직', 1), ('다른', 1), ('구들', 1), ('천구', 1), ('내', 1), ('달리', 1), ('비롯', 1), ('자전', 1), ('수의', 1), ('원', 1), ('가시', 1), ('설명', 1), ('주기', 1), ('점', 1), ('충족', 1), ('고수', 1), ('다수', 1), ('종교', 1), ('지도자', 1), ('지상계', 1), ('천상계', 1), ('대립', 1), ('이분법', 1), ('구도', 1), ('무너', 1), ('리', 1), ('신의', 1), ('형상', 1), ('인간', 1), ('한갓', 1), ('거주', 1), ('전락', 1), ('장점', 1), ('인정', 1), ('상충', 1), ('피하', 1), ('고자', 1), ('외', 1), ('제안', 1), ('적', 1), ('질서', 1), ('신봉', 1), ('플라톤', 1), ('배치', 1), ('추구', 1), ('주의자', 1), ('관측', 1), ('활용', 1), ('수립', 1), ('더', 1), ('이상', 1), ('존', 1), ('역학', 1), ('정당화', 1), ('가설', 1), ('로부터', 1), ('성공', 1), ('때', 1), ('가정', 1), ('힘', 1), ('곱', 1), ('비례', 1), ('거리', 1), ('제곱', 1), ('반비례', 1), ('포함', 1), ('밀도', 1), ('균질', 1), ('거나', 1), ('대칭', 1), ('구라', 1), ('부피', 1), ('각각', 1), ('또한', 1), ('여기', 1), ('증명', 1), ('적용', 1), ('궤도', 1), ('사과', 1), ('낙하', 1), ('관', 1), ('실', 1), ('값', 1), ('실재', 1), ('입증', 1), ('본격', 1), ('유입', 1), ('청', 1), ('왕조', 1), ('역법', 1), ('기반', 1), ('모델', 1), ('계산법', 1), ('위상', 1), ('구체화', 1), ('차례대로', 1), ('정확도', 1), ('생활', 1), ('리듬', 1), ('자리', 1), ('연결', 1), ('효율', 1), ('더라도', 1), ('불온', 1), ('학자', 1), ('방식', 1), ('사이', 1), ('관계', 1), ('해결', 1), ('방이', 1), ('대해', 1), ('부정', 1), ('태도', 1), ('견', 1), ('지하', 1), ('면서', 1), ('론', 1), ('입', 1), ('각하', 1), ('실증', 1), ('독창', 1), ('수성', 1), ('금성', 1), ('태양계', 1), ('학설', 1), ('의문', 1), ('제기', 1), ('기', 1), ('빛', 1), ('결부', 1), ('광학', 1), ('창안', 1), ('왕석', 1), ('추론', 1), ('계산', 1), ('파악', 1), ('고전', 1), ('못', 1), ('채', 1), ('비판', 1), ('언급', 1), ('하늘', 1), ('네', 1), ('모퉁이', 1), ('증자', 1), ('원론', 1), ('뒷받침', 1), ('정의', 1), ('초', 1), ('기점', 1), ('역대', 1), ('지식', 1), ('성과', 1), ('물', 1), ('망라', 1), ('사고전서', 1), ('그대로', 1), ('반영', 1), ('편집자', 1), ('당시', 1), ('관련', 1), ('정리', 1), ('확인', 1), ('경향', 1), ('중엽', 1), ('주', 1)]

자, 이제 이렇게 명사 단위로 토큰화 시켜봤는데요, 그럼 토큰화시킨 데이터를 다시 텍스트파일에 저장해보도록 하겠습니다.

저는 이 데이터파일을 'Nounexample'이름으로 저장했습니다.

코드를 실행시키면

이렇게 파일 부분에 생성됩니다. 생성된 파일을 마우스 오른쪽을 클릭해 다운로드 해주시면 토큰화 된 새로운 데이터가 컴퓨터에 저장됩니다 :)

 

출처 : 지문) 2019년 수능 국어 [27-32] 지문

코드 참조 :  https://konlpy.org/ko/latest/

 

KoNLPy: 파이썬 한국어 NLP — KoNLPy 0.5.2 documentation

KoNLPy: 파이썬 한국어 NLP KoNLPy("코엔엘파이"라고 읽습니다)는 한국어 정보처리를 위한 파이썬 패키지입니다. 설치법은 이 곳을 참고해주세요. NLP를 처음 시작하시는 분들은 시작하기 에서 가볍게

konlpy.org

 

'졸업프로젝트' 카테고리의 다른 글

형태소 분석기에 따라 다른 워드 클라우드 결과  (0) 2021.11.24
워드 클라우드  (0) 2021.11.24
KoNLPy설치 오류  (0) 2021.11.20
NLTK, KoNLPy설치  (0) 2021.11.20
자연어처리(Natural Language Processing)  (0) 2021.11.20