0. 전체 절차
# 원시어절, 구두점, 불용어, 길이, 빈도, 정규식, 품사(형태소), ngram
# 위 과정을 모두 거치면 특징점의 숫자가 엄청나게 증가할 것이다.
1. 파일 읽어오기
1) 파일 목록 불러오기
from os import listdir
def fileids(path, ext="txt"):
return [path+file for file in listdir(path) if file.split("scraping")[-1] == ext]
2) 파일 읽어오기
def filecontent(file):
with open(file, encoding="utf-8") as fp:
content = fp.read()
return content
2. 불필요한 문자열 제거
1) 원시어절, 구두점, 품사, ngram 제거하는 정규표현식 패턴 만들기
from string import punctuation
import re
corpus = filecontent(fileids("./scraping/")[-2])
print(corpus)
pattern = dict()
# 구두점
pattern1 = re.compile(r"[{0}]".format(re.escape(punctuation)))
# corpus = pattern1.sub(" ", corpus)
pattern["punc"] = pattern1
# 불용어
pattern2 = re.compile(r"[A-Za-z0-9]{7,}")
# corpus = pattern2.sub(" ", corpus)
pattern["stopword"] = pattern2
# 이메일
pattern3 = re.compile(r"\w{2,}@\w{3,}(.\w{2,})+")
# corpus = pattern3.sub(" ", corpus)
pattern["email"] = pattern3
# 도메인
pattern4 = re.compile(r"(.?\w{2,}){2,}")
# corpus = pattern4.sub(" ", corpus)
pattern["domain"] = pattern4
# 한글, 숫자만 남기기
pattern5 = re.compile(r"[^가-힣0-9]+")
# corpus = pattern5.sub(" ", corpus)
pattern["nonkorean"] = pattern5
# 반복되는 공백문자
pattern6 = re.compile(r"\s")
# corpus = pattern6.sub(" ", corpus)
pattern["whitespace"] = pattern6
3. 특징점 만들기
- ngram, 형태소 분리, ngram으로 특징점 분석
from konlpy.tag import Komoran
ma = Komoran()
for _ in indexTerm1:
for t in ma.pos(_):
indexTerm2[t] += 1 # 원시형태소 + 품사
indexTerm[t] += 1
if len(t[0]) > 1: # 음절 길이로 정규화
indexTerm3[t[0]] += 1 # 원시형태소
indexTerm[t[0]] += 1
if t[1].startswith("N"):
indexTerm4[t[0]] += 1 # 명사
indexTerm[t[0]] += 1
for n in ngram(t[0]): # N그램(바이그램)
indexTerm5[n] += 1
indexTerm[n] += 1
4. 불필요한 문자 제거 + 특징점 찾기
- 하나로 합친 결과
from collections import defaultdict # 키가 없을 때 에러가 없도록 하기 위함
# 전체 처리해보기
# 1. 문자열 가져오기
content = filecontent(fileids("./scraping/")[-2])
# 2. 불필요한 문자 제거
1) lexicon을 만드는 부분
for _ in ["email", "punc", "stopword", "whitespace"]:
content = pattern[_].sub(" ", corpus)
indexTerm1 = defaultdict(int)
indexTerm2 = defaultdict(int)
indexTerm3 = defaultdict(int)
indexTerm4 = defaultdict(int)
indexTerm5 = defaultdict(int)
indexTerm = defaultdict(int)
# 원시어절
for term in word_tokenize(content):
indexTerm1[term] += 1
for _ in indexTerm1:
for t in ma.pos(_):
indexTerm2[t] += 1 # 원시형태소 + 품사
indexTerm[t] += 1
if len(t[0]) > 1: # 음절 길이로 정규화
indexTerm3[t[0]] += 1 # 원시형태소
indexTerm[t[0]] += 1
if t[1].startswith("N"):
indexTerm4[t[0]] += 1 # 명사
indexTerm[t[0]] += 1
for n in ngram(t[0]): # N그램(바이그램)
indexTerm5[n] += 1
indexTerm[n] += 1
2) 결과 보기
indexTerm
'데이터 분석가 역량' 카테고리의 다른 글
Day 22 ] Classification (0) | 2019.05.30 |
---|---|
Day 21 ] Project2 유사도 분석 (0) | 2019.05.29 |
Day 19 ] Deep Learning (0) | 2019.05.27 |
Day 18 ] 정보검색 - Vector 공간 (0) | 2019.05.27 |
Day 17 ] TF-IDF (0) | 2019.05.24 |