https://huggingface.co/datasets/espejelomar/code_search_net_python_10000_examples
espejelomar/code_search_net_python_10000_examples · Datasets at Hugging Face
['def', 'PintPars', '(', 'datablock', ',', 'araiblock', ',', 'zijdblock', ',', 'start', ',', 'end', ',', 'accept', ',', '*', '*', 'kwargs', ')', ':', 'if', "'version'", 'in', 'list', '(', 'kwargs', '.', 'keys', '(', ')', ')', 'and', 'kwargs', '[', "'versio
huggingface.co
https://huggingface.co/datasets/jtatman/python-code-dataset-500k
아마 스트링 데이터 다루기가 되지 않을까 싶습니다.
아직 작성 전 입니다.
이런 데이터를 좀 더 자율롭게 다뤄보겠습니다.
아래 예시는 Jupyter Notebook(.ipynb) 환경에서, Hugging Face에 올라온 code_search_net_python_10000_examples 데이터셋의 일부(약 100개 예시)만 가져와 1) print문 추가, 2) 함수 이름 변경, 3) 무작위 위치에 주석 추가, 4) 변수명 변경을 각각 개별적으로 적용하고 저장할 수 있도록 구성한 예시 코드입니다. 데이터셋이 워낙 방대하므로, 실제 실행 시에는 인터넷 연결 및 datasets 라이브러리 설치가 필요합니다. 코드는 크게 아래와 같이 단계별로 나누어 작성했습니다.
────────────────────────────────────────────────────────────────────────
1) 데이터셋 불러오기 및 샘플링
2) 코드 변환 함수 정의 (print문 추가, 함수명 변경, 주석 삽입, 변수명 변경)
3) 변환 예시 수행 및 결과 저장
4) Notebook에서 편리하게 확인할 수 있도록 출력
────────────────────────────────────────────────────────────────────────
아래 예시는 구조와 작동 방식을 보여주는 데 집중했으며, 실제 활용 시에는 주석, 함수명, 변수명 등을 원하는 스타일에 맞춰 자유롭게 수정하시기 바랍니다.
────────────────────────────────────────────────────────────────────────
[1] 데이터셋 불러오기 및 샘플링
────────────────────────────────────────────────────────────────────────
```python
# 첫 번째 셀: 데이터셋 로드하고 100개 정도만 추출
!pip install datasets --quiet
from datasets import load_dataset
import random
# Hugging Face에서 데이터셋 불러오기 (train split 사용)
dataset = load_dataset("espejelomar/code_search_net_python_10000_examples", split="train")
# 예시용으로 100개만 랜덤으로 샘플링
num_samples = 100
sampled_dataset = dataset.shuffle(seed=42).select(range(num_samples)) # 맨 앞 100개
# 또는 random.sample(range(len(dataset)), num_samples) 같이 사용 가능
```
────────────────────────────────────────────────────────────────────────
[2] 코드 변환 함수 정의
────────────────────────────────────────────────────────────────────────
아래 예시 함수들은 각각의 코드를 문자열로 받아 특정 작업을 수행한 뒤, 변환된 문자열을 반환하도록 설계되었습니다. 여기서는 간단히 정규식 또는 문자열 치환 정도만 시연하고 있으며, 실제로는 파이썬 파싱(parsing) 라이브러리를 활용해 더 정교한 처리가 가능합니다.
```python
import re
def add_random_prints(code_str, print_text="임의의 메시지"):
"""
code_str 내 임의 위치에 print문을 추가합니다.
"""
lines = code_str.split('\n')
if len(lines) > 1:
insert_idx = random.randint(0, len(lines)-1)
# 임의의 위치(줄) 뒤에 print 문을 삽입
lines.insert(insert_idx, f"print('{print_text}') # 자동 추가된 print")
return "\n".join(lines)
def rename_functions(code_str, old_name="old_function", new_name="new_function"):
"""
code_str 내 함수 이름을 변경합니다.
간단한 예시로, 완벽한 파싱 없이 문자열 치환으로 처리.
"""
# 함수 정의 부분만 단순 치환 예시 (정교하게 하려면 AST 파싱 권장)
pattern = rf"def\s+{old_name}\s*\("
replacement = f"def {new_name}("
return re.sub(pattern, replacement, code_str)
def insert_random_comment(code_str, comment_text="# 무작위 주석입니다"):
"""
code_str 내 임의 위치(줄)에 주석을 추가합니다.
"""
lines = code_str.split('\n')
if len(lines) > 1:
insert_idx = random.randint(0, len(lines)-1)
lines.insert(insert_idx, comment_text)
return "\n".join(lines)
def rename_variables(code_str, old_var="old_var", new_var="new_var"):
"""
code_str 내 특정 변수명을 간단 치환 방식으로 변경합니다.
"""
# 정규식을 이용해 old_var라는 단어가 독립적으로 등장할 때만 치환
pattern = rf"\b{old_var}\b"
return re.sub(pattern, new_var, code_str)
```
────────────────────────────────────────────────────────────────────────
[3] 변환 예시 수행 및 결과 저장
────────────────────────────────────────────────────────────────────────
아래 코드는 샘플로 가져온 100개 예시에 대하여, 각각 함수들을 적용한 결과를 리스트 형태로 저장합니다. 실제 사용 시에는 필요한 변환만 골라 적용하면 됩니다.
```python
print_injected_codes = []
function_renamed_codes = []
comment_injected_codes = []
variable_renamed_codes = []
for i in range(num_samples):
# dataset 컬럼 이름은 실제로 확인 후 변경해주세요. 예: 'content', 'code', 'func_code' 등
original_code = sampled_dataset[i]["code"] # 예시로 'code' 컬럼명 가정
# 1) print문 추가 버전
code_with_print = add_random_prints(original_code, print_text="디버깅용 출력")
print_injected_codes.append(code_with_print)
# 2) 함수명 변경 버전
code_with_renamed_func = rename_functions(original_code, old_name="solve", new_name="my_solve")
function_renamed_codes.append(code_with_renamed_func)
# 3) 무작위 주석 추가 버전
code_with_comment = insert_random_comment(original_code, comment_text="# 임의 주석 추가")
comment_injected_codes.append(code_with_comment)
# 4) 변수명 변경 버전
code_with_renamed_var = rename_variables(original_code, old_var="data", new_var="my_data")
variable_renamed_codes.append(code_with_renamed_var)
# 이렇게 변환된 4가지 종류의 코드가 각각 별도의 리스트에 보관됩니다.
```
────────────────────────────────────────────────────────────────────────
[4] 결과를 간단히 확인하기
────────────────────────────────────────────────────────────────────────
아래처럼 개별 변환 결과를 원하는 방식으로 확인할 수 있습니다. 예를 들어, 0번 인덱스의 결과만 비교해볼 수도 있고, 4가지를 모두 한 번에 출력해볼 수도 있습니다.
```python
# 0번 인덱스 코드 변환 예시 출력
print("──────────── Original Code ────────────")
print(sampled_dataset[0]["code"])
print("\n──────────── Code with Print ────────────")
print(print_injected_codes[0])
print("\n──────────── Code with Function Renamed ────────────")
print(function_renamed_codes[0])
print("\n──────────── Code with Comment Inserted ────────────")
print(comment_injected_codes[0])
print("\n──────────── Code with Variable Renamed ────────────")
print(variable_renamed_codes[0])
```
────────────────────────────────────────────────────────────────────────
▣ 활용 및 수정 가이드
────────────────────────────────────────────────────────────────────────
1. “add_random_prints”, “rename_functions” 등 함수의 이름이나 로직을 원하는 대로 변경하여 사용하실 수 있습니다.
2. 샘플링 개수(num_samples = 100)는 적절히 조정 가능하며, shuffle 뒤 .select()를 사용하면 앞에서부터 원하는 개수만큼 쉽게 가져올 수 있습니다.
3. AST 파싱(예: ast 모듈, libcst, redbaron, parso 등)을 사용하면, 좀 더 정교하게 함수명/변수명을 변환할 수 있습니다.
4. 저장 시에는 print_injected_codes, function_renamed_codes 등 4개의 리스트를 각각 파일로 쓰거나, 하나의 CSV/JSON 파일로 만들어서 관리할 수 있습니다.
위와 같은 코드 구조를 활용하면, Jupyter Notebook 환경에서 손쉽게 100여 개의 코드 예시를 추출한 뒤, 필요에 따라 다양한 조작(주석 삽입, 함수명 변경, 변수명 변경, print문 추가 등)을 한 결과를 따로 저장하여 비교·분석할 수 있습니다.
'인공지능 > 자연어 처리' 카테고리의 다른 글
ToT, GoT 정리 (1) | 2025.04.23 |
---|---|
GritLM 코드 까보기, 진행해보기 (1) | 2025.04.12 |
vllm 활용해서 logit 추출 및 logprob, CoT, SC-CoT Inference 진행 (0) | 2025.04.02 |
vllm 통해 reasoning path 데이터 만들기 (1) | 2025.03.24 |
Vllm을 활용한 빠른 Bench Mark Test 진행하기 (0) | 2025.03.21 |