[기사에 "문단 요약 알고리즘"을 입히다!]
"기사 요약 서비스"라는 주제로 개인프로젝트를 진행한 적이 있었습니다.
공부하고 싶은 기술과 관심을 두게 된 RSS라는 주제로 프로젝트를 하고 싶다는 생각 하나로 개인 프로젝트를 시작하였습니다.
RSS에서 기사정보를 가져오고 가져온 정보를 핵심내용만 담긴 3줄 문단으로 요약하여 보여주는 서비스를 개발하면서 작고 큰 다양한 어려움이 있었습니다.
RSS 피드에서 정보를 가져온다는 것 자체가 생소하였기 때문에 인터넷 검색을 통하여 RSS파싱이라는 핵심 키워드의 방향을 잡는데 다소 시간이 걸렸습니다.
RSS에서 필요한 정보만을 파싱하여 가공하는 것까지는 구현하였지만 기획한 프로젝트에 핵심 요약이라는 기능을 구현하는데 기술적인 어려움을 겪었습니다.
처음에는 기사를 요약해주는 라이브러리가 존재하나 찾아도 봤지만, 영어기사를 요약해주는 라이브러리는 발견하였지만, 한글 기사를 요약하는 라이브러리는 찾지 못했습니다.
고민 끝에 직접 자기만의 알고리즘을 구현하기로 하였습니다.
우선 기사에 핵심 문단만을 보여주는 기능을 구현하는 데 필요한 작은 작업과 큰 작업을 분류하고 알고리즘의 시나리오를 정리했습니다.
기사의 핵심이 담긴 문단을 찾기 위해서는 명사의 추출을 통한 빈도수 체크가 제일 중요하다고 판단되어 받아온 기사정보에서 명사를 추출하기 위해서 직접 형태소를 공부를 시작하였습니다.
형태소를 공부하면서 한글 구조에는 의존형태소 앞에 명사가 온다는 것을 알게 되었으며 의존형태소를 찾아 JAVA 프로그래밍을 통해 조건문에 걸고 조건에 포함되면 문자열 메소드를 사용하여 명사를 추출하였습니다.
그 후 추출한 명사의 수를 검사하면서 명사의 빈도수를 표시하였습니다.
그 후 빈도수가 높은 명사를 기사에서 중요한 핵심 단어라고 판단하여 빈도수가 높은 5개의 명사만을 임시로 저장하여 각 문단과 포함돼있는지 체크를 하여 각 문단에 우선순위를 부여하였습니다.
또한, 기사의 제목에 있는 명사가 포함된 경우에는 본문에 명사보다 빈도수를 더 표시하여 중요한 문단이라고 판단하였습니다.
이렇게 머릿속으로 생각한 알고리즘을 구현하고 테스트를 해보는 과정에서 또 한 번의 관문에 빠지게 되었습니다.
예상했던 것보다 받아온 기사정보가 문단 요약 알고리즘에 적용되어 실행되는데 많은 시간이 걸리는 것을 발견하였습니다.
코드를 다시 보면서 기능의 구현에 초점을 맞추어 구현하다 보니 시간복잡도가 크게 나온 것을 알게 되었고 명사의 빈도수 체크와 문단과의 비교 과정에서 시간복잡도를 줄이기 위해 java HashMap이라는 클래스를 사용하여 해결하였습니다 .
이처럼 어려움에 부딪히는 상황에 포기하지 않고 해결방안을 생각하고 도전하는 과정을 통해 얻은 경험은 "티몬"의 서비스의 개발과 개선에 이바지할 수 있다고 확신합니다.
글자수 1,402자2,408Byte