서문
언어학의 연구 대상은 언어 자료이다. 일상적인 언어 현상인 대화 자료나 소설이나 신문 같은 문어 자료를 다양하게 모으면 엄청나게 많은 양이 될 것이다. 언어 자료에 기반해 언어 현상을 연구하는 것은 대량의 언어 자료를 상대하는 일이다. 방대한 언어 자료를 사람이 일일이 처리하기에는 너무 많기 때문에 언어 자료 기반 연구에는 기계의 도움이 절실하다. 컴퓨터는 이러한 반복적인 작업을 매우 빠르고 정확하게 지정된 방식대로 수행한다. 그러나 컴퓨터를 활용하려면 컴퓨터에게 작업을 지시하기 위한 대화를 위해서 컴퓨터 언어를 배워야 한다.
이 책에서는 언어 자료 처리를 위한 프로그래밍 언어인 Perl을 소개한다. Perl은 텍스트를 다루기에 적합한 언어로 미국의 언어학자 Larry Wall이 개발한 프로그래밍 언어이다. 이 프로그래밍 언어의 개발 목적은 텍스트 처리 작업을 원활히 수행하고 보고를 위한 실용적인 것이다. Perl의 텍스트 처리 방식은 언어 자료의 처리 방식과 매우 유사하다. 이러한 연유로 텍스트 형태로 쓰여진 언어 자료를 처리하는 목적으로 Perl은 많이 활용된다. Perl 이외에도 다른 프로그래밍 언어가 많이 있지만 언어 자료 텍스트의 검색, 추출, 치환 등의 작업에는 Perl이 매우 강력한 힘을 발휘한다. 이외에도 Perl은 다양한 장점을 갖고 있다. Perl의 문법은 간단하기 때문에 프로그래밍에 문외한인 초보자도 쉽게 배울 수 있다. 또한 프로그램 개발 환경도 간단해서 쉽게 설치하고 구동할 수 있다. Perl 개발자들의 커뮤니티도 잘 발달되어 있어서 프로그램 개발시에 많은 도움을 받을 수 있다. 이런 개발자 커뮤니티는 웹을 중심으로 발전하였는데, 개발에 직접적인 도움을 웹을 통해서 쉽게 얻을 수 있다. Perl에 대한 입문서나 기타 학습서도 많이 발간되어 있어서 관련 자료도 쉽게 구할 수 있다.
이 책은 크게 3부로 구성되어 있다. 1부에서는 Perl에 대해 간단히 소개하고 언어학과의 연관성을 살펴 본다. 프로그래밍이란 무엇이며 언어학에 왜 Perl이필요한가를 다루고 있다. 또한 Perl이 언어 자료를 처리하는 측면을 ‘더러운 손’이라는 관점에서 설명하고 있다. 이외에도 Perl의 자료를 얻을 수 있는 웹 사이트와 커뮤니티 및 학습서를 소개한다. 2부에서는 Perl을 배우기 위한 내용이 소개되는데, 여타의 프로그래밍 소개서와 흡사하다. Perl이 가진 문법을 항목별로 소개한다. 크게 스칼라 데이터, 배열, 제어 구조, 함수, 해쉬와 레퍼런스, 파일 핸들, 패턴 매칭 부분으로 나누어 설명한다. 프로그래밍 언어도 하나의 언어로서 단어와 문법을 가지고 있다. Perl을 배우기 위해서도 먼저 Perl의 단어와 문법을 알아야 한다. 이 책은 인문학도인 언어학 전공자를 위한 것으로 여타의 컴퓨터 전문 서적보다 더 쉽게 Perl을 소개하려고 노력했다. 3부에서는 언어 자료 처리를 위한 Perl 프로그래밍을 소개하기 위해서, 텍스트 처리, 통계 처리, 용례 찾기, 파싱과 같은 항목을 다룬다. 텍스트 처리에서는 일반적인 Perl의 프로그래밍 기법을 이용하는 것과 Perl 개발자들이 미리 만들어 놓은 모듈을 활용하는 방식을 소개한다. 통계 처리에서는 언어 자료 처리에서 필수적으로 다루어야 하는 빈도와 n-gram을 자세히 다룬다. 언어 자료를 통계적으로 처리하기 위해 기본이 되는 부분으로 언어학 전공자에 가장 절실히 필요한 부분이다. 용례 찾기는 텍스트에서 하나의 단어가 어떻게 활용되는지를 검색하는 기능인데, 프로그램을 활용하여 언어 자료를 처리하는 가장 초보적인 부분이다. 파싱은 문장을 주어진 문법에 따라서 잘게 잘라내는 것으로, 여러 가지 문법 이론과 전산적 알고리즘에 따라서 매우 복잡하게 설명될 수도 있다. 이 책에서는 파싱부분에서 Perl 개발자들이 미리 만들어 놓은 모듈을 활용하였는데, 문법을 제공하면 문법에 맞게 주어진 문장 구조를 분석하거나 해당 문장이 문법에 부합하는지를 검토한다.
프로그래밍은 컴퓨터공학이나 전산학을 공부하는 사람들에게도 매우 어려운 분야로, 프로그래밍 자체는 쉽지 않은 분야이다. 인문학도에 속하는 언어학 전공자는 공학이나 과학을 접해보지 못한 사람들로, 프로그래밍 분야에 매우 생소하다. 이 책은 인문학도인 언어학 전공자를 위해 씌어졌으므로 이런 점을 고려하였다. 무엇보다도 프로그래밍을 쉽게 소개하려고 애를 썼으며, 언어 자료를 처리하는 데에 꼭 필요한 프로그래밍을 소개하였다. 또한 언어학 및 연관된 학문 분야에서 강의 교재로 활용될 수 있도록 적절한 분량을 설정하였다. 수업 진도에 맞게 내용과 분량을 설계하고, 각 장의 끝에 연습문제를 실었다. 연습문제는 각 장을 학습하고 반드시 스스로 만들어 보아야 할 프로그래밍 훈련 과제를 담고 있다. 쉬운 프로그래밍 과제도 있지만 어려운 과제도 있다. 프로그래밍은 눈으로 배우는 것이 아니라 키보드와 화면을 통해서 배우는 것이므로 실습은 필수적이다. 이 책을 학습하는 사람은 연습문제로 제시한 프로그래밍을 모두 적절하게 구현할 수 있어야 한다.
마지막으로, 프로그래밍 작업은 반드시 전산학을 전공한 사람들만 하는 것이 아니다. 프로그래밍 언어는 누구나 배울 수 있는 언어 중의 하나이다. 사람들이 자연언어를 사용해서 다른 사람들과 대화하듯이 안공언어인 프로그래밍 언어를 활용하면 컴퓨터와 대화할 수 있다. 프로그래밍은 컴퓨터에게 작업을 시키기 위한 것으로, 컴퓨터가 사용하는 언어로 대화를 나눌 수 있어야 한다. 반복적이며 시간이 많이 소요되거나 스스로 연산하기에 어려운 작업을 컴퓨터에게 시키기 위해서는 먼저 컴퓨터와 대화하는 법을 배워야 한다. 영어를 모국어로 활용하는 외국인과 대화하는 방법을 배우기 위해서는 영어를 먼저 배워야 하는 것과 마찬가지이다. 이것이 프로그래밍 언어를 배우는 목적이다. 또한 Perl을 활용해서 언어 자료를 처리하고, 처리된 언어 자료를 잘 분석하는 능력을 배양하도록 하는 것이 이 책 저자들의 바람이다.
2008년 2월
저자 일동
--- 본문 중에서