{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "# **Token의 활용**\n", "\n", "## **1 Token**\n", "어휘분석" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip3 install nltk" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# import nltk\n", "# nltk.download('punkt')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "text = \"\"\"오늘 금요일, 오후.\n", "오늘 조금만 버티면 주말입니다. 조금만 힘내세요\"\"\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['오늘 금요일, 오후.', '오늘 조금만 버티면 주말입니다.', '조금만 힘내세요']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk import sent_tokenize\n", "sent_tokenize(text)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['오늘', '금요일', ',', '오후', '.', '오늘', '조금만', '버티면', '주말입니다', '.', '조금만', '힘내세요']" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk import word_tokenize\n", "text = word_tokenize(text)\n", "text" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'오늘': 2,\n", " '금요일': 1,\n", " ',': 1,\n", " '오후': 1,\n", " '.': 2,\n", " '조금만': 2,\n", " '버티면': 1,\n", " '주말입니다': 1,\n", " '힘내세요': 1}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk import FreqDist\n", "dict(FreqDist(text))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **2 Re 를 사용한 Regex 정규식**" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['010',\n", " '1234',\n", " '1234',\n", " '010',\n", " '8888',\n", " '9999',\n", " '010',\n", " '2123',\n", " '1299',\n", " '010',\n", " '222',\n", " '9999',\n", " '010',\n", " '555',\n", " '2345']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "text = \"\"\"Park 010-1234-1234 Kim 010-8888-9999 \n", "Lee 010-2123-1299 홍길동 010-222-9999 신사임당 010-555-2345\"\"\"\n", "\n", "from nltk.tokenize import RegexpTokenizer\n", "re_capt = RegexpTokenizer(r'\\d+')\n", "re_capt.tokenize(text)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Park', 'Kim', 'Lee']" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk.tokenize import RegexpTokenizer\n", "re_capt = RegexpTokenizer(r'[A-z]\\w+')\n", "re_capt.tokenize(text)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['홍길동', '신사임당']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk.tokenize import RegexpTokenizer\n", "re_capt = RegexpTokenizer(r'[가-힣]\\w+')\n", "re_capt.tokenize(text)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# 한글/영문 이름만 추출하기\n", "# 아이디어 1 : 숫자가 아닌 내용만 추출한다\n", "# 아이디어 2 : 한글과 영어만 추출한다" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **3 Regex 정규식 Quiz 풀기**" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Park',\n", " '-',\n", " '-',\n", " 'Kim',\n", " '-',\n", " '-',\n", " '\\nLee',\n", " '-',\n", " '-',\n", " '홍길동',\n", " '-',\n", " '-',\n", " '신사임당',\n", " '-',\n", " '-']" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 숫자가 아닌 나머지 추출하기 : 결과가 지저분한 단점\n", "re_capt = RegexpTokenizer(r'[^ 0-9]+')\n", "re_capt.tokenize(text)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Park', 'Kim', 'Lee', '홍길동', '신사임당']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 한글/영문이름 추출하기\n", "from nltk.tokenize import RegexpTokenizer\n", "re_capt = RegexpTokenizer(r'[A-z가-힣]\\w+')\n", "re_capt.tokenize(text)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['010-1234-1234',\n", " '010-8888-9999',\n", " '010-2123-1299',\n", " '010-222-9999',\n", " '010-555-2345']" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# cf) 전화번호만 추출해보기\n", "re_capt = RegexpTokenizer('\\d{3}-\\d{3,4}-\\d{3,4}')\n", "re_capt.tokenize(text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **4 import re**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "text = \"갤럭시(GalaxyNote9)노트9은 2018년 08월 폭발적인 인기를 이끌고 있습니다\"" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['갤럭시', '노트', '은', '년', '월', '폭발적인', '인기를', '이끌고', '있습니다']" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import re\n", "tokenizer = re.compile(r'[가-힣]+')\n", "tokenizer.findall(text)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'갤럭시노트은 년 월 폭발적인 인기를 이끌고 있습니다'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 한글과 공백을 제외한 나머지 선택후 제거\n", "tokenizer = re.compile(r'[^ 가-힣]+')\n", "tokenizer.sub(\"\", text)" ] } ], "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.3" } }, "nbformat": 4, "nbformat_minor": 2 }