# 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) ```