이번 글에서는 파일을 다루는 방법을 배워보겠습니다. 파일은 컴퓨터 시스템 곳곳에 존재하며, 운영체제 자체도 수많은 파일로 구성되어 있을 만큼 컴퓨팅 환경에서 빼놓을 수 없는 핵심 요소입니다.
파이썬에서 다루는 파일은 크게 두 가지 유형으로 나뉩니다. 바로 텍스트 파일(Text File)과 바이너리 파일(Binary File)입니다.
여기서는 그중 텍스트 파일을 중심으로, 텍스트 분석에 자주 활용되는 핵심 기능들을 하나씩 살펴보겠습니다.
- 단어 수
- 문자 수
- 평균 단어 길이
- 불용어(Stop Words) 수
- 특수 문자 수
- 숫자 데이터 수
- 대문자 단어 수
실습에는 "css3.txt"라는 테스트 파일을 사용합니다.
1. 단어 수 세기
문장에서 단어 개수를 셀 때 가장 간단한 방법은 split() 함수를 사용하는 것입니다. split()은 공백을 기준으로 문자열을 잘라 리스트로 만들어 주기 때문에, 리스트의 길이를 구하면 곧 전체 단어 수가 됩니다.
예제 코드
filename = "C:/Users/TP/Desktop/css3.txt"
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
message = "sorry" + filename
print(message)
else:
words = contents.split()
number_words = len(words)
print("Total words of", filename, "is", str(number_words))
실행 결과
Total words of C:/Users/TP/Desktop/css3.txt is 3574
2. 문자 수 세기
각 단어가 몇 개의 문자로 이루어져 있는지 확인하려면 단어의 길이(length)를 이용하면 됩니다. 예를 들어 어떤 단어의 길이가 5라면 그 단어는 5개의 문자로 구성된 것입니다. 모든 단어의 길이를 합산하면 파일 전체의 문자 수를 구할 수 있습니다.
예제 코드
filename = "C:/Users/TP/Desktop/css3.txt"
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
message = "sorry" + filename
print(message)
else:
words = 0
characters = 0
wordslist = contents.split()
words += len(wordslist)
characters += sum(len(word) for word in wordslist)
print("TOTAL CHARACTERS IN A TEXT FILE =", characters)
실행 결과
TOTAL CHARACTERS IN A TEXT FILE = 17783
3. 평균 단어 길이
평균 단어 길이는 모든 단어 길이의 합을 전체 단어 수로 나누어 계산합니다. 텍스트의 난이도나 문체를 가늠할 때 유용하게 참고할 수 있는 지표입니다.
예제 코드
filename = "C:/Users/TP/Desktop/css3.txt"
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
message = "sorry" + filename
print(message)
else:
wordslist = contents.split()
words = len(wordslist)
average = sum(len(word) for word in wordslist) / words
print("Average =", average)
실행 결과
Average= 4.97
4. 불용어(Stop Words) 수 세기
불용어란 문장에 자주 등장하지만 분석에 큰 의미를 부여하지 않는 단어(예: the, is, a 등)를 말합니다. 파이썬에서는 NLP(자연어 처리) 라이브러리인 NLTK를 활용해 불용어를 손쉽게 걸러낼 수 있습니다. NLTK를 처음 사용한다면 nltk.download('stopwords')와 nltk.download('punkt') 명령으로 필요한 리소스를 먼저 내려받아야 합니다.
예제 코드
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
my_example_sent = "This is a sample sentence"
mystop_words = set(stopwords.words('english'))
my_word_tokens = word_tokenize(my_example_sent)
my_filtered_sentence = []
for w in my_word_tokens:
if w not in mystop_words:
my_filtered_sentence.append(w)
print(my_word_tokens)
print(my_filtered_sentence)
실행 결과
['This', 'is', 'a', 'sample', 'sentence'] ['This', 'sample', 'sentence']
5. 특수 문자 수 세기
텍스트에 포함된 해시태그(#)나 멘션(@) 같은 특수 문자의 개수를 계산할 수 있습니다. SNS 데이터처럼 특수 문자 자체가 의미 있는 정보가 되는 경우, 이를 통해 추가적인 인사이트를 얻는 데 도움이 됩니다.
예제 코드
import collections as ct
filename = "C:/Users/TP/Desktop/css3.txt"
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
message = "sorry" + filename
print(message)
else:
words = contents.split()
special_chars = "#"
new = sum(v for k, v in ct.Counter(words).items() if k in special_chars)
print("Total Special Characters", new)
실행 결과
Total Special Characters 0
6. 숫자 데이터 수 세기
텍스트 파일 안에 숫자로만 이루어진 항목이 몇 개 있는지 계산할 수 있습니다. 문자열 메서드인 isdigit()을 map() 함수와 함께 사용하면 아주 간단하게 처리됩니다.
예제 코드
filename = "C:/Users/TP/Desktop/css3.txt"
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
message = "sorry" + filename
print(message)
else:
words = sum(map(str.isdigit, contents.split()))
print("TOTAL NUMERIC IN A TEXT FILE =", words)
실행 결과
TOTAL NUMERIC IN A TEXT FILE = 2
7. 대문자 단어 수 세기
isupper() 함수를 사용하면 텍스트 안에서 모든 글자가 대문자로 된 단어의 개수를 셀 수 있습니다. 강조 표현이나 약어(acronym) 분석에 유용하게 활용됩니다.
예제 코드
filename = "C:/Users/TP/Desktop/css3.txt"
try:
with open(filename) as file_object:
contents = file_object.read()
except FileNotFoundError:
message = "sorry" + filename
print(message)
else:
words = sum(map(str.isupper, contents.split()))
print("TOTAL UPPERCASE WORDS IN A TEXT FILE =", words)
실행 결과
TOTAL UPPERCASE WORDS IN A TEXT FILE = 121
지금까지 파이썬으로 텍스트 파일을 열고, 단어 수부터 대문자 단어 수까지 다양한 통계 정보를 추출하는 방법을 살펴보았습니다. 이러한 기본 통계는 본격적인 텍스트 마이닝이나 자연어 처리 프로젝트에서 데이터 전처리 단계에 매우 유용하게 활용되므로, 직접 코드를 실행하며 익혀두시길 권합니다.