{
"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
}