SOOJLE
1.0.0
1.0.0
  • SOOJLE Document
  • 프로젝트 요약
  • 프로젝트 개요
    • 프로젝트 소개
    • 추진 배경 및 필요성
    • 프로젝트 내용
      • 기능적 요구사항
      • 비기능적 요구사항
    • 개발환경 및 팀 구성
    • 워크플로우
      • 계획 수립 & 설계
      • 데이터 수집 및 정규화
      • 인공지능 개발
      • 서비스 모듈 개발
      • 성능 평가 및 보고
    • 프로젝트 예산 내역
  • 사전조사 & 의사결정
    • 사전조사
      • 재학생 대상 사전조사
      • 수집 URL 대상 목록
        • 세종대학교 직할
        • 세종대학교 학과
        • 공식 공지사항
        • 세종대 평생교육원
        • 외부 웹사이트
      • 학습 모델 사전조사
        • LSA - 잠재 의미 분석
        • LDA - 잠재 디리클레 할당
        • Word2Vec - 워드투벡터
        • FastText - 패스트텍스트
    • 의사결정
      • 사용자 인증 방식 의사결정
      • 데이터베이스 의사결정
        • MySQL vs MongoDB 성능 분석
      • 토픽별 의사결정
      • 부가 기능 의사 결정
  • 프로젝트 설계
    • 시스템 구조 설계
    • 핵심 기능 설계
      • 데이터 크롤러 설계
      • 게시물 토픽 정의 및 분류
      • 사용자 관심분야 측정
      • 뉴스피드 설계
        • 사용자-문서 유사도(Recommendation Score)
        • FaS (관심 분야 및 유사도 측정 - 추가)
        • 토픽 뉴스피드 목록
      • 검색 알고리즘 설계
        • 검색 알고리즘 1차 설계
        • 검색 알고리즘 1차 개선안
        • 검색 알고리즘 2차 설계
    • 요구사항 목록
      • DB 요구사항
      • 기능 요구사항
      • 품질 요구사항
      • 관리 요구사항
  • DB
    • 구조 설계
    • 테이블 명세
  • 데이터 크롤러
    • 데이터 크롤러 개요
    • 크롤링 URL 선정
    • 크롤러 구현을 위한 사전조사
    • 크롤러 개발 과정
      • 크롤러 프로그램 설계
      • 크롤러 규격화
      • 크롤러 정규화
      • 데이터 정제 과정
      • 에러 핸들러 구현
      • 배포 환경 이식을 위한 Porting
    • Issue & Exception
    • 결과 보고
  • 인공지능 개발
    • 인공지능 개발 개요
    • NLP 스터디
      • Bag of Words(BoW)
      • Document Term Matrix(DTM)
      • TF-IDF(Term Frequency-Inverse Document Frequency)
      • 문서 유사도(Document Similarity)
    • 데이터 전처리 과정
    • 개발 과정
      • 토크나이저 구현
      • LDA 모델 학습 및 구현
    • LDA 학습 모델링
      • 1차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 2차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 3차 파라미터 튜닝 결과 (NUM_TOPICS)
      • NUM_TOPICS 파라미터 의사결정
      • 4차 파라미터 튜닝 결과 (PASESS, ITERATION)
      • 최종 학습 모델 명세
    • Word2Vec(FastText) 학습 모델링
    • Issue & Exception
    • 성능 분석 결과
  • BackEnd
    • 서버 구축 및 배포
      • SOOJLE 서버 구조
      • 상용 서버 (UWSGI + NGINX) 구축
      • HTTPS 서버 구현
    • API 문서 개요
    • API 목록
      • Analysis
      • Auth API
      • Newsfeed API
      • Post API
      • Search API
      • Admin API
    • 세종 Auth API
    • 통계 기능 설계
    • Issue & Exception
    • 성능 분석 결과
  • FRONTEND
    • 프론트엔드 설계 개요
    • 디자인 설계 의사결정
      • 디자인 컨셉 및 기능 정의
      • 컴포넌트 디자인
      • Logo Variation
    • 화면 흐름도
    • 페이지 UI 명세
      • Main Page
      • Header
      • Footer
      • Mobile Control Bar
      • Login Page
      • Timeline Page
      • Menu Page
      • Hyperlink Icons Page
      • Search Component & Mobile Search Modal
      • Search Page
      • Post Block
      • Snackbar
  • 프로그램 배포
    • 프로그램 개요
    • 시스템 아키텍쳐
    • 주요 기능 및 명세
    • 프로그램 테스트
    • 구현 결과물 배포
  • 마무리
    • References
  • SOOJLE AI
  • SEJONG AUTH
  • IML Tokenizer
  • SOOJLE Crawler
  • SOOJLE Frontend
  • SOOJLE Backend
Powered by GitBook
On this page
  • 개요
  • 수행 과정 명세
  • 문자열 전처리
  • 형태소 분석
  • 유효성 검증
  • 코드 실행 예제
  • 소스 코드 배포
  • 실행 요구사항

Was this helpful?

  1. 인공지능 개발
  2. 개발 과정

토크나이저 구현

개요

학습할 데이터에 대한 전처리(토큰화 및 정제) 과정을 수행하는 토크나이저 구현에 대하여 기술한다.

수행 과정 명세

문자열 전처리

입력받은 문자열에 대하여 형태소 분석을 하기 전에 전처리 과정을 수행한다. 구체적인 전처리 과정은 다음과 같다.

  • Emoji 패턴 제거

emoji_pattern = re.compile("["
        u"\U0001F600-\U0001F64F"  # emoticons
        u"\U0001F300-\U0001F5FF"  # symbols & pictographs
        u"\U0001F680-\U0001F6FF"  # transport & map symbols
        u"\U0001F1E0-\U0001F1FF"  # flags (iOS)
                           "]+", flags=re.UNICODE)
  • 모든 공백 문자 제거

re.sub('\s'," ", doc)
  • 모든 영어 소문자로 변환

 doc.lower()
  • 모든 특수 기호 제거

 re.sub('[-=+,#/\?:^$.@*\"※~&%ㆍ!』\\‘|\(\)\[\]\<\>`\'…》]', ' ', doc)
  • 한글 및 영어를 제외한 모든 문자 제거

re.compile('[^ ㄱ-ㅣ가-힣|a-z]+').sub('', doc)

형태소 분석

전처리가 완료된 문서를 기반으로 각 문장에 대하여 형태소 분석 과정을 수행한다. 형태소 분석에는 Python의 Konlpy 모듈을 임포트하여 수행한다.

def konlpy_morp_analy(text):
	#print("docs_length:",len(text))
	try:
		result = komoran.pos(text)
		return result
	except:
		return []

def konlpy_parser(m_list):
	tokens = []
	df = pd.DataFrame(columns = ["text", "type"])
	for data,m_type in m_list:
		if is_valid(data, m_type):
			tokens += [data]
	return tokens

유효성 검증

형태소 분석 결과에 대하여 2차 전처리 과정을 수행한다.

  • 단어의 길이가 1자리 이하이거나, 불용어 사전 내에 존재할 경우 제외

h_s_set = h_stopwords
if len(data) <= 1 or data in h_s_set:
		return False
  • 해당 단어가 영어이고, 영어 불용어 사전에 포함되어 있거나 단어의 길이가 2 이하일 경우 제외

e_s_set = set(stopwords.words('english'))
if m_type == "SL" and (data in e_s_set or len(data) <= 2):
		return False
  • 비속어를 포함하여 토픽에 기여를 하지 못할만한 각종 단어 제외

if data in stop_set:
		return False
  • 한글이지만 단일 자모음을 포함할 경우 제외

if any(i in single_stop for i in data):
		return False
  • 영어 및 한자로 분류되지만 한글이 섞여 있을 경우 제외

if m_type not in ["SH", "SL"] and 
data != re.compile('[^ ㄱ-ㅣ가-힣|a-z]+').sub('', data):
		return False
  • 단어의 총 길이가 15자 이상일 경우 제외(의미없는 문자의 나열인 경우가 큼)

if len(data) >= 15:
		return False
  • 해당 형태소가 일반 명사, 고유 명사, 영어, 한자 중 하나일 경우, 유효한 토큰으로 취급

sign_list = sign_dict.values()
	if m_type in sign_list:
		return True

코드 실행 예제

SOOJLE의 토크나이저는 해당 문서 내에서 토픽이 관련이 있을 만한 토큰만을 추출해내야 하기 때문에 주로 명사 쪽의 단어들을 많이 추출되는 것을 확인할 수 있다.

단 해당 토크나이저가 아직 완벽한 것은 아니다. 2번째 예제처럼 "이랑" 이라는 토큰이 추출된 것은 앞 단어가 영어이기 때문에 해당 영어 명사를 보충하는 단어인지, 아니면 영어와 한글의 합성어인지 머신이 명확하게 판단할 수 없었기 때문이다.

소스 코드 배포

실행 요구사항

분류

설명

플랫폼

Github

라이센스

MIT License

분류

버전명

개발 언어

Python 3.7.1

라이브러리 요구사항

konlpy==0.5.1

nltk==3.4.4

numpy==1.16.4

pandas==0.24.2

python-dateutil==2.8.0

pytz==2019.1

six==1.12.0

JPype1==0.7.0

Previous개발 과정NextLDA 모델 학습 및 구현

Last updated 5 years ago

Was this helpful?

https://github.com/iml1111/IML_Tokenizergithub.com