import os
#작업하는 경로(위치)가 어디인지 확인
print(os.getcwd())
#절대경로
with open("D:/python/res/path_test/test.txt", "r", encoding="utf-8") as f:
data = f.read()
print(data)
#상대경로
with open("path_test/test.txt", "r", encoding="utf-8") as f:
data = f.read()
print(data)
cwd = current working directory 현재 작업 중인 디렉터리(폴더)를 의미하고,
get = 얻어온다는 의미가 있으니, 현재 작업 중인 폴더를 얻어온다는 의미가 되겠습니다.
When working with tabular data, such as data stored in spreadsheets or databases, pandas is the right tool for you. pandas will help you to explore, clean, and process your data. In pandas, a data table is called aDataFrame.
import os
from konlpy.tag import Okt
import nltk
nltk.download()
from nltk import word_tokenize, pos_tag, ne_chunk
sentence = 'Mike is working at IT Centre'
# 토큰화, 품사태깅 pos_tag 후 -> ne_chunk 개체명인식
sentence = pos_tag(word_tokenize(sentence))
print(sentence)
# 개체명 인식
sentence = ne_chunk(sentence)
print(sentence)
저는 아나콘다 환경에서 파이썬을 사용하고 있으므로 이미 루트 가상환경에 NLTK가 설치가 되어있었습니다. KoNLPy와 다르게 별도의 설정등을 해줄 필요가 없습니다.아나콘다 내에서 가상환경을 따로 만들어 설치를 해줄시엔 해당 가상환경 activate 후에
> conda install nltk]
> conda update nltk
위 명령어를 입력하여 설치해주면 됩니다.
하지만 예제를 수행하면 여러 에러 메세지들을 볼 수 있습니다. 예를들어 nltk.download('words'), nltk.download('maxent_ne_chunker')를 하라는 등의 메세지가 뜨면 오류메세지에 뜬 명령어 그대로 입력해서 별도의 모듈들을 설치해주면 됩니다.
○ 예제 시행해보기
from nltk import word_tokenize, pos_tag, ne_chunk
sentence = 'Mike is working at IT Centre'
# 토큰화, 품사태깅 pos_tag 후 -> ne_chunk 개체명인식
sentence = pos_tag(word_tokenize(sentence))
print(sentence)
# 개체명 인식
sentence = ne_chunk(sentence)
print(sentence)
nltk.Text()는 자연어 데이터의 탐색을 편리하게 해주는 다양한 기능들을 제공합니다.
import nltk
from nltk.corpus import gutenberg
from nltk import regexp_tokenize
f = gutenberg.fileids()
doc_en = gutenberg.open('austen-emma.txt').read()
pattern = r'''(?x) ([A-Z]\.)+ | \w+(-\w+)* | \$?\d+(\.\d+)?%? | \.\.\. | [][.,;"'?():-_`]'''
tokens_en = regexp_tokenize(doc_en, pattern)
en = nltk.Text(toekns_en)
테스트를 하기 위해NLTK에서 제공하는 제인오스틴의 소설 Emma데이터를 다운받습니다. 이후문서를 토큰으로 나누는 작업을 해주었는데 한국어를 토크나이즈하거나 품사태깅, 개체명 태깅 등을 할 때는 KoNLPy를 이용하는 것이 훨씬 낫다고 봅니다.
예를 들어 NLTK에서 '나는 바보다'라는 문장에서 '바보다'라는 토큰의 개체명을 'Organization'으로 인식하는 등의 문제가 있습니다. 그래서 한국어 처리를 할 때에는 nltk를 데이터를 탐색하는 용도로 많이 사용하는 듯 합니다.
2. 그래프 그리기
en.plot(50)
en문서의 50개의 토큰만 플롯으로 그려보았습니다.
en.dispersion_plot(['Emma','Frank','Jane'])
3. 문서 탐색
print(len(en.tokens)) # 토큰의 개수 확인
print(len(set(en.tokens))) # Unique 토큰의 개수 확인
en.vocab() # Frequency Distribution 확인
print(en.count('Emma')) # 'Emma'의 개수
en.concordance('Emma', lines=5) # 'Emma'가 들어있는 5개의 문장만 출력
en.similar('Emma')
en.similar('Frank') # 비슷한 단어 찾기
> 결과
> 191061
> 7927
> FreqDist({',': 12018, '.': 8853, 'to': 5127, 'the': 4844, 'and': 4653, 'of': 4278, '"': 4187, 'I': 3177, 'a': 3000, 'was': 2385, ...})
> 865
> Displaying 5 of 865 matches:
Emma by Jane Austen 1816 ] VOLUME I CHAPT
Emma Woodhouse , handsome , clever , and
both daughters , but particularly of Emma . Between them it was more the int
friend very mutually attached , and Emma doing just what she liked ; highly e
r own . The real evils , indeed , of Emma situation were the power of havi
> she it he i harriet you her jane him that me and all they them there herself was hartfield be
mr mrs emma harriet you it her she he him hartfield them jane that isabella all herself look i me
그래프를 그리는 것 외에도 토큰의 개수나 frequency distribution등을 확인하여데이터의 구조를 살펴보는데 좋은 기능들도 많이 제공하고 있습니다.
4. Chunking nltk.RegexParser()
Chunking얕은 구문 분석, 음성 및 단구 (명사구와 같은)를 식별하는 것
tokens = "The little yellow dog barked at the Persian cat".split()
tags_en = nltk.pos_tag(tokens)
parser_en = nltk.RegexpParser("NP: {<DT>?<JJ>?<NN.*>*}")
chunks_en = parser_en.parse(tags_en)
chunks_en.draw()