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

+ Recent posts