본문 바로가기
  • Let's go grab a data
Data/Python

사용자 정의 말뭉치 읽고 처리

by pub-lican-ai 2018. 12. 11.
반응형

import nltk

from nltk.corpus.reader import PlaintextCorpusReader

#Plaintext Corpus Reader을 활용하여 사용자 말뭉치 사용 'word_tokenizer= ' 이용해서  테스트 데이터는 wiki에서 긁어서 만든 txt 파일

wiki = PlaintextCorpusReader(root='wiki/', fileids=['turing.txt','jobs.txt'], encoding='utf-8')

wiki.fileids()

['turing.txt', 'jobs.txt']

#words로 토큰화 해보지만 조사 등을 잘라낼 수 없다.
fid = wiki.fileids()[0]
wiki.raw(fileids=fid)
print(wiki.words()[:50])
['앨런', '매티슨', '튜링', '(', '영어', ':', 'Alan', 'Mathison', 'Turing', ',', 'OBE', ',', 'FRS', ',', '1912년', '6월', '23일', '~', '1954년', '6월', '7일', ')', '은', '영국의', '수학자', ',', '암호학자', ',', '논리학자이자', '컴퓨터', '과학의', '선구적', '인물이다', '.', '알고리즘과', '계산', '개념을', '튜링', '기계라는', '추상', '모델을', '통해', '형식화함으로써', '컴퓨터', '과학의', '발전에', '지대한', '공헌을', '했다', '.[']

한국어 토큰기를 사용해야 함.

아래와 같은 오픈소스를 설치하여 활용 가능


pyko (Sejong Corpus Reader / 한국어 토큰기(Twitter에서 공개한 Java(Scala)->JVM 필요) https://pypi.org/project/pyko/

  • pip install (PyPI 표준 패키지 스토어) - 플랫폼 별로 C 코드 빌드가 안되어 있는 경우가 있음. 컴파일러 동작시 오류 가능성
  • conda install (Anaconda 패키지 스토어) - 아나콘다 배포판 사용 시 Conda를 사용하면 더 안정성 있음

1) conda install -c conda-forge jpype1

2) jre 8 64bit version이상 설치 필요 https://www.oracle.com/technetwork/java/javase/jre8-downloads-2133155.html

3) pip install pyko

공개된 버전에서는 트위터의 오픈 소스 토큰기(한글)를 사용




import pyko

ko_tokenizer = pyko.OpenKoreanTextProcessor()

text = '홍길동이 진행하는 파이썬 자연어 처리 입문입니다. ㅋㅋㅋ'

ko_tokenizer.tokenize(text)

['홍길동', '이', '진행', '하는', '파이썬', '자연어', '처리', '입문', '입니다', '.', 'ㅋㅋㅋ']

wiki = PlaintextCorpusReader(root='wiki/', fileids=['turing.txt','jobs.txt'], encoding='utf-8', word_tokenizer=ko_tokenizer)
print(wiki.words()[:50])
print(len(wiki.words()))
['앨런', '매티', '슨', '튜링', '(', '영어', ':', 'Alan', 'Mathison', 'Turing', ',', 'OBE', ',', 'FRS', ',', '1912년', '6월', '23일', '~', '1954년', '6월', '7일', ')', '은', '영국', '의', '수학자', ',', '암호학자', ',', '논리학자', '이자', '컴퓨터', '과학', '의', '선구', '적', '인물', '이다', '.', '알고리즘', '과', '계산', '개념', '을', '튜링', '기계', '라는', '추상', '모델']
633


#정규표현식 사용 가능 wiki = PlaintextCorpusReader(root='wiki/', fileids='.+\.txt$', encoding='utf-8', word_tokenizer=ko_tokenizer) print(wiki.words()[:50]) print(len(wiki.words()))

['스티브', '폴', '잡스', '(', '영어', ':', 'Steve', 'Paul', 'Jobs', ',', '1955년', '2월', '25일', '~', '2011년', '10월', '5일', '),', '간단히', '스티브', '잡스', '(', 'Steve', 'Jobs', ')', '는', '미국', '의', '기업인', '이었다', '.', '애플', '의', '전', 'CEO', '이자', '공동', '창립', '자', '다', '.', '2011년', '10월', '5일', '췌장암', '에', '의해', '사망', '했다', '.']
633


반응형