# Python 문자열 처리 - join()과 set() 메서드
> 관련 문서: [[02일차_2장 to 2.4_GPT 기초]]
## 개요
텍스트 데이터에서 고유 문자를 추출할 때 사용하는 Python 메서드들에 대한 설명입니다.
```python
# 이것은 텍스트에 나타나는 모든 문자 집합을 가져온 것입니다.
# 그것들은 고유한 것들만 남겨서 sorted로 정렬을 하면 아래와 같은 결과를 볼 수 있습니다.
ko_text = "".join(data["train"]["document"])
ko_chars = sorted(list(set((ko_text))))
ko_vocab_size = len(ko_chars)
print("총 글자 수 :", ko_vocab_size)
```
## `.join()` 메서드
### 기본 개념
- 문자열 메서드로, 리스트나 다른 iterable의 요소들을 하나의 문자열로 합쳐줍니다
- 구분자 문자열이 각 요소 사이에 삽입됩니다
### 사용 예시
```python
# 구분자가 있는 경우
"-".join(["a", "b", "c"]) # 결과: "a-b-c"
# 구분자가 없는 경우 (빈 문자열)
"".join(["안", "녕", "하", "세", "요"]) # 결과: "안녕하세요"
# 실제 코드에서의 사용
"".join(data["train"]["document"]) # 모든 문서를 하나의 긴 문자열로 합침
```
## `list(set())` 조합
### 단계별 분석
1. **`set()` 단계**: 중복 제거
- set 자료형은 중복을 허용하지 않는 특성을 가짐
- 순서는 보장되지 않음
2. **`list()` 단계**: set을 리스트로 변환
- 인덱싱과 정렬이 가능한 리스트 형태로 변환
### 예시 코드
```python
text = "안녕안녕하세요"
# 1단계: set으로 중복 제거
unique_chars = set(text) # {'안', '녕', '하', '세', '요'}
# 2단계: 다시 list로 변환
char_list = list(unique_chars) # ['안', '녕', '하', '세', '요']
# 한 번에 처리
list(set(text)) # ['안', '녕', '하', '세', '요']
```
## 전체 코드 분석
```python
# 원본 코드
ko_text = "".join(data["train"]["document"])
ko_chars = sorted(list(set((ko_text))))
ko_vocab_size = len(ko_chars)
print("총 글자 수 :", ko_vocab_size)
```
### 실행 흐름
1. **문서 합치기**: `"".join(data["train"]["document"])`
- 모든 훈련 문서를 하나의 긴 문자열로 결합
2. **중복 제거 및 정렬**: `sorted(list(set(ko_text)))`
- `set()`: 중복 문자 제거
- `list()`: 리스트로 변환
- `sorted()`: 유니코드 순서로 정렬
3. **개수 계산**: `len(ko_chars)`
- 고유 문자의 총 개수 계산
### 예시
문서가 `["안녕", "하세요", "안녕"]`인 경우:
- `join` 후: `"안녕하세요안녕"`
- `set` 후: `{'안', '녕', '하', '세', '요'}`
- `sorted` 후: `['세', '안', '요', '하', '녕']` (유니코드 순)
- 최종 vocab_size: `5`
## 활용 목적
이 코드는 **어휘 사전(vocabulary) 구축**을 위해 사용됩니다:
- 전체 텍스트에서 사용된 모든 고유 문자 추출
- 문자 단위 토큰화를 위한 기초 작업
- GPT 모델의 입력 처리를 위한 전처리 단계
---
*Tags: #Python #텍스트처리 #전처리 #GPT #어휘사전*
```python
help(list.lambda)
```