Skip to content

Commit

Permalink
PyKOMORAN bootstrap 추가 related #2
Browse files Browse the repository at this point in the history
  • Loading branch information
9bow committed Mar 26, 2019
1 parent dd729c4 commit 6d9c5ce
Show file tree
Hide file tree
Showing 2 changed files with 443 additions and 0 deletions.
374 changes: 374 additions & 0 deletions PyKOMORAN/bootstrap/bootstrap.ipynb
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
}
Loading

0 comments on commit 6d9c5ce

Please sign in to comment.