개발/AI&Chatbot

Day 05 - 머신러닝

honeypeach 2025. 10. 20. 09:31

🧠 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. 실무에서 꼭 쓰는 미니 규칙

  1. 영어는 전부 소문자로 바꾸기 (lower())
  2. 앞뒤 공백은 없애기 (strip())
  3. 구두점(, . ! 등)은 초보자는 일단 split()으로 처리하기
  4. 아무 내용이 없는 문자열은 건너뛰기
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분 과제 ✏️

  1. 자신이 자주 쓰는 5문장을 이어붙이기
  2. split()으로 단어 개수 구하기
  3. set()으로 어휘 크기 구하기
  4. max()로 가장 긴 단어 찾기
s = "여기에 당신의 문장 다섯 개를 한 줄로 이어 붙이세요."
tokens = s.split()
vocab = set(tokens)
longest = max(tokens, key=len)
print("토큰 수:", len(tokens))
print("어휘 크기:", len(vocab))
print("가장 긴 단어:", longest, "| 길이:", len(longest))

 

728x90