-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
443 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,374 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"# 3줄의 코드로 형태소 분석 시작하기\n", | ||
"\n", | ||
"PyKomoran을 이용하여 3줄의 코드로 형태소 분석을 따라해보도록 하겠습니다.\n", | ||
"\n", | ||
"이 내용은 [PyKOMORAN 문서 사이트](https://docs.komoran.kr/pykomoran/tutorial.html)에서 확인하실 수 있습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## PyKomoran 설치\n", | ||
"\n", | ||
"자세한 설치 관련한 내용은 [PyKomoran 설치하기](https://docs.komoran.kr/pykomoran/installation.html) 문서를 참고해주시기 바랍니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"아직 PyKomoran 설치가 되어 있지 않다면, 아래 Cell을 실행하여 PyKomoran을 설치합니다.\n", | ||
"\n", | ||
"Jupyter Notebook에서는 `!`을 붙여 쉘 명령어 실행이 가능하며, PyKomroan 설치 과정은 3줄의 코딩에 포함되지 않습니다. ^^;" | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 1, | ||
"metadata": { | ||
"scrolled": true | ||
}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"Requirement already satisfied: PyKomoran in /home/reserve/.pyenv/versions/3.6.7/envs/pytorch/lib/python3.6/site-packages (0.1.1)\r\n", | ||
"Requirement already satisfied: py4j==0.10.8.1 in /home/reserve/.pyenv/versions/3.6.7/envs/pytorch/lib/python3.6/site-packages (from PyKomoran) (0.10.8.1)\r\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"!pip install PyKomoran" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"또한, PyKomoran의 정상적 실행을 위해서는 Java 8+ 이상의 환경이 필요합니다. (Oracle JDK 또는 Open JDK를 권합니다.)\n", | ||
"\n", | ||
"아래 명령어를 실행하여 현재 설치된 Java 환경을 확인합니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 2, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"openjdk version \"1.8.0_191\"\r\n", | ||
"OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.16.04.1-b12)\r\n", | ||
"OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)\r\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"!java -version" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## PyKomoran 불러오기\n", | ||
"\n", | ||
"다음과 같이 PyKomoran을 불러옵니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 3, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"from PyKomoran import *" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## Komoran 객체 생성하기\n", | ||
"\n", | ||
"이제, 형태소 분석을 위한 `Komoran` 객체를 생성합니다.\n", | ||
"\n", | ||
"이 과정에서 Java 버전의 KOMORAN을 불러오게 되며, 약간의 시간이 소요됩니다. 이제 `Komoran` 객체의 메소드를 이용하여 형태소를 분석할 수 있습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 4, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"komoran = Komoran()" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## 형태소 분석하기\n", | ||
"\n", | ||
"PyKOMORAN은 KOMORAN에서 제공하는 다양한 형태의 형태소 분석 결과를 제공합니다.\n", | ||
"\n", | ||
"우선 입력 문장을 형태소 별로 나누어 `형태소/품사` 형태로 태깅된 결과를 보도록 하겠습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 5, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"KOMORAN/SL 은/JX 한국어/NNP 형태소/NNP 분석기/NNG 이/VCP ㅂ니다/EF ./SF\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_plain_text(\"KOMORAN은 한국어 형태소 분석기입니다.\"))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"형태소 분석의 결과인 품사 기호는 [품사표 (PoS Table)](https://docs.komoran.kr/firststep/postypes.html) 에서 찾아보실 수 있습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## 번외편. 다양한 방법으로 형태소 분석하기\n", | ||
"\n", | ||
"`Komoran` 객체는 위에서 살펴본 `get_plain_text()` 메소드 외에도, 다양한 메소드들을 지원합니다.\n", | ||
"\n", | ||
"분석할 문장을 준비하고, 위에서 생성한 `Komoran` 객체의 사용 예시를 살펴보겠습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 6, | ||
"metadata": {}, | ||
"outputs": [], | ||
"source": [ | ||
"str_to_analyze = \"① 대한민국은 민주공화국이다. ② 대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.\"" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"`get_nouns(str)`: 입력 문장에서 명사만 추출합니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 7, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"['대한민국', '민주공화국', '대한민국', '주권', '국민', '권력', '국민']\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_nouns(str_to_analyze))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"`get_morphes_by_tags(str, tag_list=list)`: 입력 문장에서 주어진 품사들만 추출합니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 8, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"['대한민국', '민주공화국', '.', '대한민국', '주권', '국민', '권력', '국민', '.']\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_morphes_by_tags(str_to_analyze, tag_list=['NNP', 'NNG', 'SF']))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"`get_plain_text(str)`: 입력 문장 내에 형태소/품사 형태로 태그를 합니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 9, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"①/SW 대한민국/NNP 은/JX 민주공화국/NNP 이/VCP 다/EF ./SF ②/SW 대한민국/NNP 의/JKG 주권/NNP 은/JX 국민/NNG 에게/JKB 있/VV 고/EC ,/SP 모든/MM 권력/NNG 은/JX 국민/NNG 으로부터/JKB 나오/VV ㄴ다/EF ./SF\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_plain_text(str_to_analyze))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"`get_token_list(str)`: 입력 문장에 대해서 형태소/품사/시작지점/종료지점을 갖는 Token 자료형들을 반환받습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 10, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[①/SW(0,1), 대한민국/NNP(2,6), 은/JX(6,7), 민주공화국/NNP(8,13), 이/VCP(13,14), 다/EF(14,15), ./SF(15,16), ②/SW(17,18), 대한민국/NNP(19,23), 의/JKG(23,24), 주권/NNP(25,27), 은/JX(27,28), 국민/NNG(29,31), 에게/JKB(31,33), 있/VV(34,35), 고/EC(35,36), ,/SP(36,37), 모든/MM(38,40), 권력/NNG(41,43), 은/JX(43,44), 국민/NNG(45,47), 으로부터/JKB(47,51), 나오/VV(52,54), ㄴ다/EF(53,55), ./SF(55,56)]\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_token_list(str_to_analyze))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"`get_token_list(str, flatten=False)`: 입력 문장에 대해서 Token 자료형들을 반환받습니다. 이 때, 어절 단위로 나누어 반환받습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 11, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[[①/SW(0,1)], [대한민국/NNP(2,6), 은/JX(6,7)], [민주공화국/NNP(8,13), 이/VCP(13,14), 다/EF(14,15), ./SF(15,16)], [②/SW(17,18)], [대한민국/NNP(19,23), 의/JKG(23,24)], [주권/NNP(25,27), 은/JX(27,28)], [국민/NNG(29,31), 에게/JKB(31,33)], [있/VV(34,35), 고/EC(35,36), ,/SP(36,37)], [모든/MM(38,40)], [권력/NNG(41,43), 은/JX(43,44)], [국민/NNG(45,47), 으로부터/JKB(47,51)], [나오/VV(52,54), ㄴ다/EF(53,55), ./SF(55,56)]]\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_token_list(str_to_analyze, flatten=False))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"`get_token_list(str, flatten=False, use_pos_name=True)`: 입력 문장에 대해서 Token 자료형들을 반환받습니다. 이 때, 품사 기호 대신 이름을 사용합니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 12, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[①/기타기호(논리수학기호,화폐기호)(0,1), 대한민국/고유 명사(2,6), 은/보조사(6,7), 민주공화국/고유 명사(8,13), 이/긍정 지정사(13,14), 다/종결 어미(14,15), ./마침표,물음표,느낌표(15,16), ②/기타기호(논리수학기호,화폐기호)(17,18), 대한민국/고유 명사(19,23), 의/관형격 조사(23,24), 주권/고유 명사(25,27), 은/보조사(27,28), 국민/일반 명사(29,31), 에게/부사격 조사(31,33), 있/동사(34,35), 고/연결 어미(35,36), ,/쉼표,가운뎃점,콜론,빗금(36,37), 모든/관형사(38,40), 권력/일반 명사(41,43), 은/보조사(43,44), 국민/일반 명사(45,47), 으로부터/부사격 조사(47,51), 나오/동사(52,54), ㄴ다/종결 어미(53,55), ./마침표,물음표,느낌표(55,56)]\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_token_list(str_to_analyze, use_pos_name=True))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"`get_list(str)`: 입력 문장에 대해서 형태소/품사를 갖는 Pair 자료형들을 반환받습니다." | ||
] | ||
}, | ||
{ | ||
"cell_type": "code", | ||
"execution_count": 13, | ||
"metadata": {}, | ||
"outputs": [ | ||
{ | ||
"name": "stdout", | ||
"output_type": "stream", | ||
"text": [ | ||
"[①/SW, 대한민국/NNP, 은/JX, 민주공화국/NNP, 이/VCP, 다/EF, ./SF, ②/SW, 대한민국/NNP, 의/JKG, 주권/NNP, 은/JX, 국민/NNG, 에게/JKB, 있/VV, 고/EC, ,/SP, 모든/MM, 권력/NNG, 은/JX, 국민/NNG, 으로부터/JKB, 나오/VV, ㄴ다/EF, ./SF]\n" | ||
] | ||
} | ||
], | ||
"source": [ | ||
"print(komoran.get_list(str_to_analyze))" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"metadata": {}, | ||
"source": [ | ||
"## 결론\n", | ||
"\n", | ||
"지금까지 PyKomoran을 이용하여 3줄의 코드로 형태소 분석을 따라해보았습니다.\n", | ||
"\n", | ||
"이 내용은 [PyKOMORAN 문서 사이트](https://docs.komoran.kr/pykomoran/tutorial.html)에서도 확인하실 수 있습니다." | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"kernelspec": { | ||
"display_name": "Python 3", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.6.7" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 2 | ||
} |
Oops, something went wrong.