방송대 파이썬프로그래밍기초 13강: 텍스트 분석 파이프라인과 전처리
텍스트 파일을 읽었다고 곧바로 중요한 단어를 알 수 있는 것은 아니다. 대소문자와 문장부호를 정리하지 않으면 같은 단어가 갈라지고, 불용어를 남기면 의미 없는 단어가 상위 순위를 차지한다. 원시 텍스트가 빈도 정보와 시각적 보고서로 바뀌는 중간 상태를 따라가며, 각 단계의 입력·출력과 실패 조건을 점검해 보자.
텍스트 분석기는 원시 자료를 판단 가능한 정보로 바꾼다
강의의 실전 프로젝트는 소설·뉴스 기사 같은 텍스트 파일을 읽어 중요한 키워드를 추출하고, 빈도를 시각적으로 표현해 파일로 보고하는 전체 파이프라인을 설계한다. 분석 대상은 강의에서 제시한 약 65만 단어 규모의 영어 소설 전집이지만, 핵심 학습 과제는 특정 작품의 내용이 아니라 큰 텍스트를 일관된 처리 단계로 바꾸는 방법이다.
원시 데이터(raw data)는 아직 질문에 답하도록 정리되지 않은 입력이다. 같은 단어의 표기가 통일되지 않고 문장부호와 흔한 기능어가 섞인 상태에서는 단순 집계 결과가 중요도를 제대로 보여 주지 못한다. 따라서 프로젝트의 목표는 파일 내용을 그대로 출력하는 데 있지 않고, 원시 텍스트를 비교·해석 가능한 정보(information)로 변환하는 데 있다.
핵심 질문: 각 단계가 받은 데이터는 어떤 형태이며, 다음 단계에 넘길 때 무엇이 달라지는가? 파이프라인을 이해하려면 함수 이름보다 입력 형태와 출력 형태의 변화를 먼저 추적한다.
파이프라인은 수집·전처리·분석·시각화를 연결한다
데이터 분석의 생애주기는 원시 데이터가 인사이트가 되기까지의 표준 처리 흐름이다. 강의에서는 이를 수집(collection), 전처리(preprocessing), 분석(analysis), 시각화(visualization)의 네 단계로 설명한다. 각 단계의 출력이 다음 단계의 입력이므로 앞부분의 오류가 뒤로 전달된다.
| 단계 | 받는 것 | 핵심 작업 | 내보내는 것 | 이 프로젝트의 구현 |
|---|---|---|---|---|
| 수집 | 파일 경로 | 외부 데이터를 메모리로 적재 | 원시 문자열 | 텍스트 파일 읽기 |
| 전처리 | 원시 문자열 | 표기 통일·불필요 요소 제거·분할 | 분석할 단어 리스트 | 소문자화, 문장부호 제거, 불용어 필터링 |
| 분석 | 단어 리스트 | 패턴과 빈도 계산 | 단어-빈도 딕셔너리 | 단어별 카운팅 |
| 시각화 | 정렬된 빈도 자료 | 비교하기 쉬운 형태로 표현 | 텍스트 그래프·보고 파일 | 빈도순 막대 출력 |
전처리와 분석을 바꾸어 실행하면 Data, data, data.가 서로 다른 키로 집계된다. 정렬 전에 시각화하면 많이 나온 단어가 한눈에 드러나지 않는다. 따라서 이 파이프라인의 순서는 장식이 아니라 각 단계가 요구하는 입력 조건이 만든 의존 관계다.
GIGO는 분석 기법보다 입력 품질이 먼저임을 보여 준다
GIGO(Garbage In, Garbage Out)는 잘못되거나 부정확한 데이터를 입력하면 정교한 분석 기법을 적용해도 잘못된 결과가 나온다는 원칙이다. 예를 들어 apple의 빈도를 알고 싶은데 Apple, apple, apple!을 다른 단어로 센다면 계산 자체는 정확해도 질문에 대한 답은 부정확하다.
| 입력 문제 | 그대로 집계한 결과 | 왜 실패하는가 | 전처리 기준 |
|---|---|---|---|
Apple과 apple | 두 개의 키 | 대소문자 차이를 의미 차이로 오해 | lower()로 표기 통일 |
data,와 data. | 문장부호별 키 | 구두점이 단어 일부로 남음 | replace()로 제거 |
the, is, of | 높은 빈도 | 문법상 필요하지만 분석 의미는 작음 | 불용어 집합으로 필터링 |
| 잘못 고른 파일 | 엉뚱한 단어 순위 | 분석 질문과 입력 대상이 불일치 | 파일명·경로·확장자 확인 |
오개념 교정: 전처리는 데이터를 임의로 예쁘게 만드는 과정이 아니다. 분석 질문에서 같은 것으로 볼 표기를 합치고, 필요 없는 요소를 정해진 기준으로 제외하는 과정이다. 무엇을 제거했는지 설명할 수 없다면 결과도 해석하기 어렵다.
프로그램은 단계별 책임을 함수로 분리한다
강의는 전체 프로그램을 데이터 로드, 불용어 필터링, 빈도 분석, 텍스트 시각화의 순서로 설계하고 각 기능을 함수로 모듈화한다. 한 함수가 한 단계의 책임을 가지면 중간 결과를 따로 확인할 수 있고, 전처리 규칙이나 출력 형식만 바꿀 때 다른 단계를 건드리지 않아도 된다.
def load_text(path):
"""파일을 읽어 원시 문자열을 반환한다."""
pass
def clean_text(text, stopwords):
"""표기를 통일하고 불용어를 제외한 단어 리스트를 반환한다."""
pass
def count_words(word_list):
"""단어별 빈도 딕셔너리를 반환한다."""
pass
def get_sorted_list(counts_dict):
"""빈도순으로 정렬한 단어-빈도 쌍을 반환한다."""
pass
def print_text_graph(data):
"""정렬된 자료를 텍스트 막대로 표현한다."""
pass
이 코드는 강의의 함수 구조를 학습용 골격으로 정리한 것이다. 구현 전에도 각 함수의 입력과 반환값을 문장으로 먼저 정하면 연결 오류를 줄일 수 있다. 예를 들어 clean_text()가 문자열을 반환하는지 단어 리스트를 반환하는지 정하지 않으면 count_words()가 문자 단위로 순회할 수 있다.
함수 경계 점검: 함수마다 “무엇을 받는가 → 무엇을 바꾸는가 → 무엇을 반환하는가”를 한 줄로 적는다. 반환값이 다음 함수의 입력 조건과 정확히 맞아야 파이프라인이 연결된다.
파일 선택은 경로와 CWD를 일치시키는 수집 단계다
사용자는 프로그램 실행 중 분석할 파일 경로를 직접 입력하거나, 프로그램이 보여 준 파일 목록에서 하나를 선택할 수 있다. 직접 입력은 단순하지만 철자와 경로 오류가 발생하기 쉽다. 목록 선택은 존재하는 후보만 보여 줄 수 있어 입력 오류를 줄이는 대신 목록 생성과 번호 검사가 필요하다.
CWD(Current Working Directory)는 현재 파이썬 프로그램이 실행되고 있는 작업 위치다. 파일을 열 때 폴더 정보 없이 파일명만 주면 파이썬은 기본적으로 CWD에서 그 파일을 찾는다. 파일이 실제로 존재해도 작업 위치가 다르면 찾을 수 없으므로, 수집 단계에서는 먼저 현재 위치와 파일 목록을 확인해야 한다.
import os
print("현재 작업 위치:", os.getcwd())
text_files = [name for name in os.listdir()
if name.endswith(".txt")]
for index, name in enumerate(text_files, start=1):
print(index, name)
selected = 1 # 입력을 대신한 학습용 선택 번호
path = text_files[selected - 1]
os.listdir()로 현재 위치의 항목을 확인하고, 확장자가 .txt인 이름만 후보로 만든다. 사용자에게는 1번부터 보여 주지만 리스트 인덱스는 0부터 시작하므로 selected - 1로 변환한다. 후보가 없거나 선택 번호가 범위를 벗어난 경우를 검사한 뒤 인덱싱해야 한다.
실패 원인: 화면의 1번을 그대로 text_files[1]에 넣으면 두 번째 파일이 선택된다. 사용자 번호 체계와 리스트 인덱스 체계가 한 칸 다르다는 사실을 경계값 1과 마지막 번호로 검산한다.
전처리는 표기 통일 뒤 불용어를 제외한다
불용어(stopwords)는 문법적으로는 필요하지만 현재 분석 관점에서는 의미가 작은 단어다. 강의는 영어 예로 a, the, is, are, of, at 등을 제시한다. 어떤 단어가 불용어인지는 분석 목적에 따라 달라지므로, 제거 목록을 먼저 명시해야 한다.
전처리 순서도 중요하다. 먼저 lower()로 대소문자를 통일하고, replace(old, new)로 문장부호를 제거한 뒤, split()으로 단어를 나눈다. 그다음 불용어에 포함되지 않은 단어만 남긴다. 소문자화 전에 소문자 불용어 집합과 비교하면 문장 첫머리의 The가 제거되지 않는다.
def clean_text(text, stopwords):
normalized = text.lower()
normalized = normalized.replace(",", "")
normalized = normalized.replace(".", "")
words = normalized.split()
return [word for word in words if word not in stopwords]
sample = ("Data is useful. Data becomes information "
"when data is cleaned, counted, and compared.")
stopwords = {"is", "when", "and"}
words = clean_text(sample, stopwords)
print(words)
직접 구성한 학습용 문장에서 소문자화와 문장부호 제거 후에는 13개 단어가 만들어진다. is 두 번, when 한 번, and 한 번을 제외하면 분석 대상은 9개다.
| 상태 | 앞부분 예시 | 단어 수 | 확인할 것 |
|---|---|---|---|
| 원시 문자열 | Data is useful. Data... | 아직 미분할 | 대소문자·문장부호 존재 |
| 소문자·문장부호 제거 | data is useful data... | 분할 전 | 같은 표기의 통합 |
split() 뒤 | data, is, useful, data... | 13 | 문자열이 단어 리스트로 변환 |
| 불용어 제외 뒤 | data, useful, data... | 9 | 제외 수 13 - 4 = 9 |
딕셔너리는 단어를 키로, 빈도를 값으로 저장한다
빈도 분석은 각 단어가 몇 번 등장했는지 기록하는 단계다. 단어는 고유한 식별자이므로 딕셔너리의 키가 되고, 출현 횟수는 그 단어의 속성이므로 값이 된다. 같은 단어를 다시 만나면 기존 값을 1 증가시키고, 처음 만난 단어라면 1로 초기화한다.
def count_words(word_list):
counts = {}
for word in word_list:
counts[word] = counts.get(word, 0) + 1
return counts
words = ["data", "useful", "data", "becomes", "information",
"data", "cleaned", "counted", "compared"]
counts = count_words(words)
print(counts)
counts.get(word, 0)은 키가 있으면 현재 빈도를 반환하고, 없으면 기본값 0을 반환한다. 여기에 1을 더해 저장하므로 별도의 if word in counts 분기 없이 두 경우를 하나의 식으로 처리한다.
| 읽은 단어 | get(word, 0) | 저장값 | data의 누적 빈도 |
|---|---|---|---|
첫 data | 0 | 1 | 1 |
useful | 0 | 1 | 1 |
둘째 data | 1 | 2 | 2 |
셋째 data | 2 | 3 | 3 |
오개념 교정: counts.get(word, 0) + 1만 계산하고 딕셔너리에 다시 저장하지 않으면 값은 바뀌지 않는다. 조회·덧셈·할당이 모두 있어야 누적 상태가 다음 반복에 전달된다.
빈도순 정렬은 키-값 구조를 쌍의 리스트로 바꾼다
딕셔너리는 키로 값을 찾는 데 적합하지만, 빈도 순위를 표시하려면 값인 빈도수를 기준으로 정렬해야 한다. 따라서 items()로 (단어, 빈도) 쌍을 얻고, 두 번째 원소를 정렬 기준으로 지정해 리스트로 변환한다.
def frequency(item):
return item[1]
def get_sorted_list(counts_dict):
pairs = counts_dict.items()
return sorted(pairs, key=frequency, reverse=True)
counts = {"data": 3, "useful": 1, "becomes": 1,
"information": 1, "cleaned": 1,
"counted": 1, "compared": 1}
ranked = get_sorted_list(counts)
print(ranked[:3])
# [('data', 3), ('useful', 1), ('becomes', 1)]
frequency(item)은 각 쌍의 인덱스 1, 즉 빈도만 반환한다. reverse=True는 큰 빈도를 앞에 둔다. 같은 빈도의 단어들은 서로 우열이 없으므로 분석에서 중요한 것은 그들의 세부 순서가 아니라 동일 빈도라는 사실이다.
정렬 기준 확인: 단어 알파벳순이면 쌍의 인덱스 0, 빈도순이면 인덱스 1을 기준으로 삼는다. “무엇을 순서화하려는가?”를 먼저 문장으로 적어 키 기준과 값 기준을 뒤바꾸지 않는다.
텍스트 시각화는 빈도 차이를 길이로 번역한다
데이터 시각화는 복잡한 데이터를 시각적 형태로 바꾸어 이해도를 높이고 효과적인 의사소통과 의사결정을 돕는 과정이다. 이 실습에서는 별도의 그래픽 라이브러리 없이 문자 반복만으로 빈도의 크기를 표현한다. 한 행은 단어·막대·정확한 빈도를 함께 보여 주므로 순위와 수치를 동시에 확인할 수 있다.
def print_text_graph(data):
for word, count in data:
bar = "#" * count
print(f"{word:12} | {bar} {count}")
ranked = [("data", 3), ("useful", 1), ("becomes", 1)]
print_text_graph(ranked)
data | ### 3
useful | # 1
becomes | # 1
막대 길이는 상대적 크기를 빠르게 보여 주고 끝의 숫자는 정확한 빈도를 보완한다. 대규모 텍스트에서는 빈도만큼 문자를 그대로 반복하면 막대가 지나치게 길어질 수 있다. 강의 범위의 텍스트 그래프를 사용할 때는 상위 항목만 선택하거나 일정 비율로 막대 길이를 줄이는 기준을 명시해야 한다.
작은 입력으로 전체 파이프라인의 연결을 검증한다
대규모 소설 파일을 바로 분석하면 중간 단계의 오류를 찾기 어렵다. 먼저 정답을 손으로 셀 수 있는 짧은 문자열로 함수를 연결하고, 각 단계의 타입·개수·대표 값을 확인한 뒤 실제 파일로 확장하는 편이 안전하다.
stopwords = {"is", "when", "and"}
text = ("Data is useful. Data becomes information "
"when data is cleaned, counted, and compared.")
words = clean_text(text, stopwords)
counts = count_words(words)
ranked = get_sorted_list(counts)
print_text_graph(ranked)
print("단어 수:", len(words)) # 9
print("고유 단어 수:", len(counts)) # 7
print("data 빈도:", counts["data"]) # 3
| 연결 지점 | 기대 타입 | 기대 크기·값 | 실패하면 되돌아갈 단계 |
|---|---|---|---|
clean_text 출력 | 단어 리스트 | 9개 | 표기 통일·분할·필터 조건 |
count_words 출력 | 딕셔너리 | 고유 단어 7개 | 카운트 초기화·누적 할당 |
get_sorted_list 출력 | 쌍의 리스트 | 첫 쌍 ('data', 3) | 정렬 기준과 내림차순 설정 |
print_text_graph 출력 | 텍스트 행 | data 막대 길이 3 | 쌍 분해와 문자 반복 |
이 검산에서 단어 수 9는 전체 출현 횟수의 합이고, 고유 단어 수 7은 딕셔너리 키의 개수다. 둘을 혼동하면 “전체 단어 수”를 묻는 질문에 고유 단어 수를 답하게 된다. 빈도 합 3 + 1 + 1 + 1 + 1 + 1 + 1 = 9가 전처리 후 단어 수와 같다는 관계도 확인할 수 있다.
입력 조건이 바뀌면 어느 단계를 수정할지 결정한다
파이프라인의 장점은 요구 변경의 영향을 단계별로 분리할 수 있다는 점이다. 분석 파일이 바뀌면 수집 단계, 불용어 기준이 바뀌면 전처리 단계, 상위 20개만 고르면 분석 후 정렬 단계, 막대 모양이 바뀌면 시각화 단계만 수정한다. 모든 기능을 한 함수에 넣으면 작은 변경도 전체 코드를 다시 확인해야 한다.
| 변경 요구 | 수정할 책임 | 유지할 부분 | 재검산 항목 |
|---|---|---|---|
| 다른 텍스트 파일 선택 | 수집 | 전처리·분석·시각화 규칙 | 경로와 읽은 문자 수 |
| 새 불용어 추가 | 전처리 | 카운팅과 그래프 형식 | 제외 전후 단어 수 |
| 빈도 상위 10개만 표시 | 정렬 결과 선택 | 원시 빈도 딕셔너리 | 정렬 후 슬라이스 경계 |
막대 문자를 *로 변경 | 시각화 | 단어와 빈도 계산 | 막대 길이와 숫자의 일치 |
잘못된 접근: 시각화 결과가 이상하다고 그래프 코드부터 고치면 원인이 전처리나 카운팅에 있을 때 해결되지 않는다. 뒤 단계의 출력이 틀렸다면 바로 앞 입력부터 거꾸로 확인하여 처음 어긋난 경계를 찾는다.
핵심 개념 정리
- 텍스트 데이터 분석기는 원시 문자열을 키워드 빈도와 이해 가능한 표현으로 변환한다.
- 파이프라인은 수집 → 전처리 → 분석 → 시각화 순으로 연결되며 앞 단계의 출력이 다음 단계의 입력이 된다.
- GIGO 원칙에 따라 대소문자·문장부호·불용어·파일 선택 오류를 먼저 교정해야 분석 결과의 품질이 높아진다.
- 함수는 로드·정제·카운팅·정렬·출력의 책임과 반환 타입을 분리한다.
- CWD와 파일 경로가 일치해야 파일명만으로 대상을 찾을 수 있고, 사용자 번호와 리스트 인덱스의 차이를 보정해야 한다.
- 전처리는 표기를 통일하고 문자열을 단어로 나눈 뒤 분석 목적에 맞는 불용어를 제외한다.
- 빈도 딕셔너리는 단어를 키, 출현 횟수를 값으로 두고
get(word, 0) + 1로 누적한다. - 빈도 순위는 키-값 쌍을 값 기준 내림차순으로 정렬하고, 텍스트 그래프는 빈도를 막대 길이로 바꾼다.
- 작은 입력에서 단어 수·고유 단어 수·빈도 합·첫 정렬 결과를 확인한 뒤 큰 파일로 확장한다.
텍스트 분석 문제를 만나면 먼저 원하는 정보와 원시 입력의 차이를 적는다. 이어서 수집·전처리·분석·시각화의 각 경계에 데이터 타입과 검산값을 정하고, 함수 하나에 책임 하나를 배정한다. 결과가 이상하면 마지막 화면만 보지 말고 출력에서 입력 방향으로 거슬러 올라가 처음 타입·개수·표기가 어긋난 단계를 찾는다. 마지막으로 작은 자료의 빈도 합이 단어 수와 일치하는지 확인한 뒤 실제 파일로 확장하면 GIGO를 예방하는 재현 가능한 분석 절차가 된다.
예상문제 10선
1. 텍스트 분석 프로젝트에서 전처리의 역할을 가장 정확하게 설명한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
- ① 정답: 같은 표기를 합치고 불필요한 요소를 제거하여 카운팅의 입력 조건을 만든다.
- ② 오답: 빈도를 표현하는 일은 파이프라인의 시각화 단계다.
- ③ 오답: 수집 단계는 파일을 읽으며 원본 삭제가 목적이 아니다.
- ④ 오답: 전처리는 원시 문자열을 단어 목록으로 바꾸는 방향이며 역변환이 아니다.
2. 강의의 표준 데이터 분석 파이프라인 순서로 옳은 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
- ① 오답: 표현할 분석 결과가 준비되기 전에 시각화를 시작했다.
- ② 오답: 분석할 외부 데이터의 적재와 정제가 먼저 필요하다.
- ③ 정답: 파일 입력에서 정제된 단어, 빈도 정보, 전달 가능한 표현으로 이어지는 의존 순서다.
- ④ 오답: 전처리할 입력을 수집하기 전에 사용하고 분석보다 시각화를 앞세웠다.
3. Apple, apple, apple.을 그대로 서로 다른 키로 센 결과가 부정확한 주된 이유는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 딕셔너리는 서로 다른 키에 같은 값을 저장할 수 있으며 문제는 키의 표기 분리다.
- ② 오답: 빈도는 덧셈과 비교에 사용할 정수로 저장하는 것이 적합하다.
- ③ 오답: 파일 위치는 로드 성공에 영향을 주지만 같은 단어 표기의 분리 원인은 아니다.
- ④ 정답: 분석 관점에서 같은 단어를 하나의 키로 합치지 못한 GIGO 사례다.
4. 본문의 학습용 텍스트는 분할 후 13개 단어이고, 불용어가 총 4회 등장한다. 필터링 뒤 단어 수는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
- ① 오답: 고유 단어 수 7을 전체 출현 단어 수와 혼동했다.
- ② 정답: 전체 13개에서 제외 대상의 출현 4회를 빼면 9개가 남는다.
- ③ 오답: 불용어 필터링 전의 단어 수를 그대로 사용했다.
- ④ 오답: 불용어를 제외하지 않고 오히려 더한 결과다.
5. 사용자에게 1번부터 파일 목록을 보여 주고 리스트에서 선택할 때 필요한 인덱스 변환은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 첫 파일을 인덱스 2로 이동시켜 차이를 더 크게 만든다.
- ② 오답: 파일 개수는 범위 검사에 쓰이며 번호-인덱스 변환식이 아니다.
- ③ 오답: 리스트 인덱스에는 정수가 필요하고 시작 위치 차이도 해결되지 않는다.
- ④ 정답: 사용자 번호 1은 리스트 인덱스 0에 대응하므로 한 칸을 보정한다.
6. counts = {}에서 처음 만난 단어 data에 counts["data"] = counts.get("data", 0) + 1을 실행하면 저장되는 값은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
- ① 정답: 키가 없어 기본값 0을 받고 1을 더해 첫 빈도 1을 저장한다.
- ② 오답: 0은 조회의 기본값이며 이후
+ 1이 적용된다. - ③ 오답: 두 번째 인수 0을 지정했으므로 키가 없을 때
None이 아니다. - ④ 오답:
get이 없는 키를 기본값으로 처리하므로 직접 인덱싱과 달리 조회 오류가 나지 않는다.
7. 단어를 알파벳순이 아니라 빈도 내림차순으로 정렬할 때 기준으로 사용할 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
- ① 오답: 인덱스 0을 기준으로 하면 단어 자체의 순서가 된다.
- ② 오답: 파일 전체 크기는 개별 단어의 순위를 구분하지 못한다.
- ③ 정답:
(단어, 빈도)쌍의 두 번째 값이 비교하려는 출현 횟수다. - ④ 오답: 선택 번호는 파일 로드용이며 단어 빈도와 관계가 없다.
8. 텍스트 그래프의 막대만 지나치게 길고 단어별 빈도 계산은 정확하다. 가장 적절한 수정 위치는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
- ① 오답: 이미 올바른 텍스트가 읽혔으므로 입력 파일 선택 문제가 아니다.
- ② 정답: 빈도는 유지하면서 표시 비율이나 상위 항목 수를 조정할 책임은 시각화 단계에 있다.
- ③ 오답: 표기 통일은 집계 키에 영향을 주지만 정확한 빈도의 막대 길이만 조절하지 않는다.
- ④ 오답: 빈도 계산이 정확하다는 조건에서 분석 값을 바꾸면 원자료의 의미가 손상된다.
9. 소문자 불용어 집합을 사용할 때 The가 제거되지 않는 문제를 예방하는 방법은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
- ① 정답: 입력 표기와 불용어 목록의 표기를 같은 기준으로 맞춘 뒤 소속을 검사한다.
- ② 오답: 비교 시점에 표기가 달라 이미 필터를 통과하므로 순서 문제가 해결되지 않는다.
- ③ 오답: 전처리 오류를 분석 이후에 고치면 분리된 키와 빈도가 남는다.
- ④ 오답: 화면만 감추고 잘못된 분석 자료에는 불용어 빈도가 그대로 존재한다.
10. 대규모 텍스트 분석을 시작하기 전에 파이프라인을 안전하게 검증하는 절차는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 대규모 결과만 보면 오류가 시작된 경계를 찾기 어렵고 수정 근거도 없다.
- ② 오답: 책임과 중간 상태가 섞여 어느 단계가 잘못되었는지 분리하기 어렵다.
- ③ 오답: 문자 수만으로 표기 통일·단어 분할·카운팅·정렬의 정확성을 증명할 수 없다.
- ④ 정답: 손으로 답을 확인할 수 있는 자료에서 각 함수 계약과 단계 연결을 검증하는 절차다.
참고 자료와 작성 기준
이 글은 해당 차시 강의자료를 바탕으로 학습 목적에 맞게 재구성한 비공식 학습자료입니다. 단계별 데이터 형태표, GIGO 오류 분석, 사용자 번호와 인덱스 경계, 소형 텍스트의 전처리·빈도 누적·정렬 추적, 텍스트 막대와 역방향 오류 진단 절차는 학습자가 전체 파이프라인을 직접 재현하도록 새로 구성했습니다.
- 작성·편집: 올에이클래스 학습연구팀
- 주요 근거: 한국방송통신대학교 컴퓨터과학과, 「파이썬프로그래밍기초」 13강 실전 프로젝트 1 강의자료, 2026
- 보충 자료: 외부 자료를 사용하지 않음
- 편집 원칙: 올에이클래스 편집 정책
- 최종 내용 검토: 2026-09-08
댓글
댓글 쓰기