🧠 1교시. 텍스트 데이터란?
— “문장은 순서가 있는 이야기예요!”
1. 텍스트는 왜 ‘시퀀스(Sequence, 순서 있는 것)’일까?
텍스트 데이터는 글자들이 줄을 서서 나열된 것임.
예를 들어 “오늘 날씨가 좋아요!” 라는 문장은
→ “오”, “늘”, “날”, “씨”, “가”, “좋”, “아”, “요”, “!”
이렇게 순서가 있는 글자들의 모임임.
이걸 조금 더 크게 보면
- 문장(sentence) → 하나의 완성된 말
- 단어(word) → 공백으로 나뉘는 말의 덩어리
- 토큰(token) → 분석하려고 쪼갠 가장 작은 조각
즉, “오늘 날씨 좋다”는
👉 ["오늘", "날씨", "좋다"] 처럼 **순서를 가진 리스트(시퀀스)**가 됨.
2. 파이썬으로 텍스트 만져보기
컴퓨터가 글자를 다룰 때는 순서를 확인하고, 나누고, 세어보는 것부터 시작함.
대표적인 도구는 len(), split(), set() 세 가지임.
🧩 1) len() : 길이 세기
- 글자(문자열)에 쓰면 “몇 글자냐?”
- 리스트에 쓰면 “몇 개 있냐?”를 알려줌.
s = "오늘 날씨가 정말 좋아요!"
print(len(s)) # 글자 수
tokens = ["오늘", "날씨가", "정말", "좋아요!"]
print(len(tokens)) # 단어 개수
💡 예시
"사과"는 글자 수 2개, ["사과", "배"]는 2개의 단어가 있음.
🧩 2) split() : 단어로 나누기
문장을 공백이나 쉼표 기준으로 잘라서 리스트로 만들어줌.
s = " 오늘 날씨가 정말 좋아요 "
print(s.split()) # ['오늘', '날씨가', '정말', '좋아요']
print("사과,배,포도".split(",")) # ['사과', '배', '포도']
💡 여러 칸 띄어쓰기( )도 하나로 처리함.
즉, 띄어쓰기가 조금 엉망이어도 잘 나눠줌.
🧩 3) set() : 중복 없애기
같은 단어가 여러 번 나와도 한 번만 남김.
즉, 고유한 단어들만 남기는 역할임.
tokens = ["오늘", "날씨가", "정말", "좋아요", "정말"]
vocab = set(tokens)
print(vocab) # {'오늘', '날씨가', '좋아요', '정말'}
💡 이걸 이용하면 “어휘 크기(=서로 다른 단어 수)”를 알 수 있음.
3. 실무에서 꼭 쓰는 미니 규칙
- 영어는 전부 소문자로 바꾸기 (lower())
- 앞뒤 공백은 없애기 (strip())
- 구두점(, . ! 등)은 초보자는 일단 split()으로 처리하기
- 아무 내용이 없는 문자열은 건너뛰기
s = " Hello, WORLD! "
clean = s.strip().lower()
print(clean) # "hello, world!"
print(clean.split()) # ['hello,', 'world!']
4. 예제로 이해하기
✅ 예제 1 : 문장 나누기
text = "오늘 하루도 화이팅! 오늘 할 일: 데이터 분석과 모델 공부."
tokens = text.split()
print(tokens)
print("토큰 수:", len(tokens))
print("어휘 크기:", len(set(tokens)))
👉 문장을 단어로 나누고, 단어 개수와 서로 다른 단어 수를 확인함.
✅ 예제 2 : 콤마(,)로 구분된 데이터 자르기
row = "2025-10-18,김진수,제품A 구매,서울"
cols = row.split(",")
print(cols)
👉 CSV(엑셀 같은 데이터 파일)처럼 생긴 문장을 깔끔히 나눌 수 있음.
✅ 예제 3 : maxsplit으로 한 번만 자르기
post = "제목: 텍스트 분석 입문 | 내용: 오늘은 split을 배움"
print(post.split("내용:", maxsplit=1))
👉 “내용:”을 기준으로 딱 한 번만 자름.
✅ 예제 4 : 여러 줄 나누기
multi = """첫째 줄
둘째 줄
넷째 줄(셋째 줄은 비어있음)
"""
print(multi.splitlines())
👉 줄바꿈 문자(\n)를 기준으로 나눠줌.
👉 비어있는 줄도 함께 남음.
5. 헷갈리기 쉬운 부분 (엣지 케이스)
상황설명
| 연속 띄어쓰기 | split()이 알아서 정리함 |
| 구두점 | “좋아요!”는 구두점까지 포함됨 |
| 한글 조사 | “좋다”와 “좋아요”는 다른 단어로 취급됨 |
| 이모지 😄 | 문자로 계산됨 |
6. 직접 해보기 💪
text = "파이썬 텍스트 분석 시작! 공백과, 구두점을 관찰합니다..."
tokens = text.split()
print("토큰 수:", len(tokens))
print("어휘 크기:", len(set(tokens)))
👉 직접 실행하면서 len, split, set이 어떻게 작동하는지 눈으로 확인해봄.
# 1) len - 텍스트 또는 토큰의 숫자를 구하는 len
s = "오늘 날씨가 너무 추워요. 집에 있는데 집에 가고 싶어요."
# 오 부터 .까지 공백을 포함한 모든 텍스트에 대한 집계
print(len(s))
# 토큰을 정할때는 의미 중심으로 구두점이나 공백을 최대한 제거한 내용을 토큰으로 설정합니다.
tokens = ['오늘','날씨','너무','추워요','집','있다','집','가다','싶다']
print(len(tokens))
# 2) split - 문장이나 텍스트를 대표적으로 토큰화시키는 가장 기본적인 메서드(기능)
# 연속 공백을 하나의 구분자 처럼 취급을 하는 것이 기본이나 ,이나 다른 구분자도 구분할 수 있게 하는 메서드
s = " 오늘 날씨가 정말 추워요 "
print(s.split())
# ,(콤마)로 구분되어있는 문장을 토큰화
print("사과,포도,배".split(","))
# maxsplit 분할 횟수 제한 하는 기능
# 분할을 한번만 한다.
print("사과,포도,배".split("," , maxsplit = 1))
# 3) set() : 중복을 제거하는 구문(고유 단어 집합)
# 토큰에 대한 전체 리스트 중에 중복 된 단어를 제거하는 구문
tokens = ['오늘', '날씨가', '정말', '추워요', '오늘', '정말']
vocab = set(tokens)
print(vocab)
print(len(tokens))
print(len(vocab))
텍스트를 처음 받았을때 자주 하는 작업
1. 길이 확인
2. 토큰화
3. 토큰 중복 제거
# 실무에서 가장 많이 사용하는 텍스트 처리 규칙
#1. strip() / lower()
# strip은 양쪽 공백을 제거
# lower는 (영어) 모든 문자를 소문자화
s = " Hello, World. "
clean1 = s.strip()
clean2 = s.lower()
clean3 = s.strip().lower()
print(clean1)
print(clean2)
print(clean3)
# , . 이러한 구분자는 향후 제거가 필요하겠지만 그래도 이런식으로 영문자를 구분할 수 있다.
print(clean3.split())
# CSV 파일 한줄을 안전하게 구분하기
# CSV - Comma Separated Values
# 엑셀 파일 중 CSV파일을 열면 우리눈에는 보이지는 않지만 콤마로 구분되어있다.
row = "2025-10-18,김진수,제품A,구매완료,서울"
cols = row.split(",") #[2025-10-18,김진수,제품A,구매완료,서울]
date, name, product, status, location = cols[0], cols[1], cols[2], cols[3], cols[4]
print(date, name, product, status, location)
7. 미니 퀴즈
1️⃣ len("AI ") → 3
2️⃣ "a,,b".split(",") → ['a', '', 'b']
3️⃣ set(["a","a","b"]) → 길이 2
4️⃣ "a b c".split() → ['a', 'b', 'c']
5️⃣ "제목:공지 본문:내용".split("본문:", 1) → 두 번째는 "내용"
8. 한 줄 정리
- 텍스트는 순서가 있는 데이터(시퀀스)임.
- len(길이), split(나누기), set(중복 제거)은 기본 3종 세트임.
- 공백, 구두점, 이모지는 다음 단계(정규식, 토크나이저)에서 다룸.
9. 10분 과제 ✏️
- 자신이 자주 쓰는 5문장을 이어붙이기
- split()으로 단어 개수 구하기
- set()으로 어휘 크기 구하기
- max()로 가장 긴 단어 찾기
s = "여기에 당신의 문장 다섯 개를 한 줄로 이어 붙이세요."
tokens = s.split()
vocab = set(tokens)
longest = max(tokens, key=len)
print("토큰 수:", len(tokens))
print("어휘 크기:", len(vocab))
print("가장 긴 단어:", longest, "| 길이:", len(longest))
'개발 > AI&Chatbot' 카테고리의 다른 글
| Day 10. Role, Goal, Style 설정하기 (0) | 2025.10.28 |
|---|---|
| Day09. Chatbot 만들기 (0) | 2025.10.27 |
| 예제를 활용한 복습(변수/조건문/반복문/리스트/함수) (0) | 2025.10.16 |
| Day04. 모듈 / NumPy / Pandas (0) | 2025.10.16 |
| ⛔️ [SyntaxError] 개념, 예시, 해결방법 (0) | 2025.10.15 |