[책요약]파이썬으로 배우는 응용텍스트 분석(Ch2. 사용자 정의 말뭉치 구축)
파이썬으로 배우는 응용텍스트 분석 (Ch2. 사용자 정의 말뭉치 구축) (P21 ~ P40까지 )
Ch2. 사용자 정의 말뭉치 구축
- 텍스트 분석 애플리케이션의 과제는 잡음 속에서 신호라고 할 만 한게 들어 있는지 알아내고 그러한 신호가 어디에 있는지 식별함
- 특징 분석 과정을 거쳐 이루어짐
말뭉치란 무엇인가?
- 말뭉치 : 자연어가 들어있는 문서의 모음집(collection)
- 주석(레이블 등)을 달 수 있다면 : 지도학습, 달 수 없다면 : 토픽 모델링, 문서 군집화
- 문서 - 단락 - 문장 - 단어 - (음절,음소,접사,문자)
영역 특정 말뭉치
- 영역마다 다른 언어를 사용 (ex. bank : 금융(은행) or 항공(방향변경))
- 잘 동작하는 언어 인식 데이터 제품을 생산하기 위해서는 영역 특정 말뭉치를 획득 필수
- 단어 집합을 정적이 아니고 동적으로 획득해야한다.
Ballen 수집 엔진
- Ballen : 사용자 지정 말뭉치 작성하기 위한 오픈소스 도구
- RSS피드의 OPML 파일(뉴스 리더의 공통 내보내기 형식) -> MongoDB 저장 -> 텍스트 말뭉치 내보냄
말뭉치 데이터 관리
- 가정1 : 말뭉치 크기 다르다. -> 확장 가능한 컴퓨터 방법론 필요
- 가정2 : 정제되고 처리가 되어야 한다. -> 돌이킬 수 없는 변형을 수행해야함
- 데이터 제품은 중간 데이터 계층으로 WORM(write-once, read-many) 저장장치 사용, 데이터 레이크(data lake, 데이터 호수)라고도 부름, 스트림으로 반복적으로 읽을 수 있기 때문
- 전처리된 말뭉치와 원래 말뭉치를 두 곳에 모두 저장해야한다는 것을 뜻함
- 데이터베이스 관리보다 NOSQL문서 저장 데이터베이스가 최선이다.(최소한의 오버헤드로 문서를 스트리밍 할 수 있는)
말뭉치 디스크 구조
- 말뭉치를 부분 집합으로 신속하게 검색할 수 있게 병렬화시킴
- 그러나 1개 파일에 문서를 1개씩 저장하면 좋지 않고 이메일은 MBOX형식, 트윗은 JSON을 사용
- 연 월 일별로 하위 폴더를 만드는 것이 좋을 수 있음
Baleen 디스크 구조
- 모든 문서는 HTML 파일로 저장(MD5 해시(중복방지))에 따라 이름 지정
- citation.bib : 저작자 속성, LICENSE.md : 필요 권리, feeds.json/manifest.json : 각 범주 및 각 특정 파일 에 대한 정보 식별
말뭉치 리더
- 디스크에서 망ㅊ뭉치에 대한 엑세스를 스트리밍 하는 도구가 NLTK 라이브러리로 잘 정리 되어있음, CorpusReader객체를 통해 말뭉치 노출
- CorpusReader : 문서를 읽고 검색, 스트리밍, 필터링 하는 프로그래밍 인터페이스 (인코딩, 전처리 가공 기술을 노출)
- 말뭉치에는 분석용 문서가 아닌 파일(README, 인용문, 라이센스)도 있기 때문에 암시적으로 지정할 수 있는 파라미터 형태로 되어 있음
NLTK를 사용한 스트리밍 데이터 액세스
- 다양한 말뭉치 리더들이 있음(신속하게 리더와 연결할 수 있게)
- 예를들어 ‘Star Wars’와 ‘Star Trek’이라는 두 가지 범주가 있다면 CategorizedPlanintextCorpusReader(번주화된 평문 형식 말뭉치 리더)를 사용하기 위해서는 식별부호와 범주를 자동으로 결정할 수 있게 정규식을 짜줘야 한다.
HTML 말뭉치 읽기
- HTML에서 모든 태그를 제거하면 장점(정형화되어 있어 전처리 유리)를 잃게 된다.
- HTMLCorpusReader를 디자인 해야한다.
말뭉치 모니터링
- 수집, 전처리 하기 위한 모니터링 시스템 : 파일 크기 추적(실제로 현업에서 이미지 오디오 파일이 포함되있는 경우가 있음)
데이터베이스에서 말뭉치 읽기
- 말뭉치와 상호작용하기 위해 사용자 지정 SqliteCorpusReader 클래스를 만들어 엑세스함(NLTK CorpusReader의 동작 모방하지만 상속하지는 않음)