텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)limdongjo 임동조
텍스트 마이닝 기본에 대해 알아보기
1-1 텍스트 마이닝은 무엇인지?
1-2 데이터 마이닝 vs 텍스트 마이닝
1-3 텍스트 분석 절차
1-4 텍스트 수집
2-1 형태소 분석
2-2 텍스트 전처리
2-3 품사 태깅
2-4 키워드 추출
2-5 키워드 선정
2-6 불용어, 가용어, 키워드
2-6 키워드 추출 절차
2-7 말뭉치(Corpus)
2-8 단어와 문서 관계 표현(Term-Document)
2-9 TF-IDF에 대해 알아보기
텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)limdongjo 임동조
텍스트 마이닝 기본에 대해 알아보기
1-1 텍스트 마이닝은 무엇인지?
1-2 데이터 마이닝 vs 텍스트 마이닝
1-3 텍스트 분석 절차
1-4 텍스트 수집
2-1 형태소 분석
2-2 텍스트 전처리
2-3 품사 태깅
2-4 키워드 추출
2-5 키워드 선정
2-6 불용어, 가용어, 키워드
2-6 키워드 추출 절차
2-7 말뭉치(Corpus)
2-8 단어와 문서 관계 표현(Term-Document)
2-9 TF-IDF에 대해 알아보기
2. merge.c 와 비교
기본 제공 된 merge.c 로 파일을 merge 했을 경우 평균 111.8 초가 소요된 것을 확인
3. merge.c 와 비교
adv-merge.c 로 파일을 merge 하였을 때 평균 37초가 소요됨을 확인하였고 이는 실제 성능에서 3배
증가된 수치이다. 하지만 기본 merge.c 에는 string을 reverse 하는 함수가 빠져있으므로 이에 대한 함
수가 추가 된다면 실제로는 더 큰 성능 상향의 효과가 있었을 것으로 예상한다.
4. 성능을 올리기 위해 시도한 일
성능에서 가장 많은 부분을 차지하는 함수는 fputc 함수 임을 확인하였다.
while 문으로 전체 문자를 한번 씩 다 파일에 쓰기 때문에 fputc()
함수가 호출 되는 경우가 많을 수 밖에 없다고 판단하였고 이를
해결하기 위하여 fprintf() 함수를 이용하여 한 문장 씩 파일에
write 해야겠다고 판단하였고 이를 실제 코드로 구현하였다.
5. 성능을 올리기 위해 시도한 일
이를 해결하기 위하여 fread() 함수를 이용하기로 하였다. 이를
이용하여 지정한 버퍼 크기만큼 read 한다면 만약 버퍼 사이즈
가 1024 라면 fgetc() 에 비하여 read를 1024 분의 1 만큼으로
줄일 수 있을 것이라 판단하였다.
여기서 중요한 부분은 이 fread() 함수로는 한 문장씩 읽어오는
것이 아니므로 읽어온 버퍼에서 문장을 구분하는 알고리즘이
필요했다. 그래서 strtok_r() 함수를 이용하여 ‘n’ 의 토큰으로
문장을 구분하였다.
또 중요한 부분은 마지막 문장이 미완성 될 경우가 있는데 이
럴 경우에는 다음 버퍼에서 읽은 첫 문장을 strcat() 함수를 이
용하여 붙여주도록 하였다.
위에서 확인 했듯이 둘째로 많이 성능을 좌우 하는 부분은 바
로 fgetc() 함수였다. 이 또한 fputc() 함수와 마찬가지로 모든
파일의 내용을 한 문자씩 읽기 때문에 일어나는 일이었다.
6. 성능을 올리기 위해 시도한 일
세번째로 성능에 영향을 미치는 부분은 바로
readaline_and_out 이라는 함수를 콜하는 오버헤드 였다.
이 부분을 해결하기 위해서 함수 콜이 아닌 메인 함수 안
에서 while 문으로 merge 가 진행되도록 하게 구현하였
다.
7. 성능을 올리기 위해 시도한 결과
merge 프로그램의 성능을 올리기 위해 fputc 함수와 fgetc 함수, 그리고 readaline_and_out 함수를 수
정한 결과 오버헤드 중에 read와 write에 대한 부분은 줄어들고 reverseString(), 즉 문장을 거꾸로 뒤
집는 함수의 오버헤드가 가장 큰 것으로 나타났다.
8. 시도했으나 성능 향상에 실패한 것들
fread() 하는 버퍼의 사이즈가 크면 클수록 성능이 빨라질 것으로 판단하여 BUFSIZE 를
2048로 변경하여 프로그램을 실행시켰으나 stdio.h에 정의 된 BUFSIZ 의 크기 보다 크
게 변화되는 것이 없는 것을 확인하였고 버퍼 사이즈를 크게한다고 하여 성능이 무조
건 빨라지는 것은 아니라는 것을 알 수 있었다.
9. 시도했으나 성능 향상에 실패한 것들
fprintf() 함수 대신 fputs() 함수를 사용하여 보았으나 output 파일에 줄바꿈 문자가 들어가지
않아 임의로 줄바꿈 문자를 넣기 위해 fputs()를 한번 더 사용하였고 이로 인해 오버헤드가 더
커져 기존의 프로그램보다 성능이 저하된 것을 확인 할 수 있었다.