A library to filter and deduplicate Q&A text datasets from CSV files.
Project description
QA 데이터 필터링 및 중복 제거 라이브러리 (data_filtering)
이 라이브러리는 질문(Q)과 답변(A) 쌍으로 구성된 텍스트 데이터셋(CSV 파일)에서 중복을 확인하고, 품질 기준에 따라 데이터를 선별하는 기능을 제공합니다.
주요 기능
- 다양한 CSV 입력 형식 지원:
- 질문 컬럼과 답변 컬럼이 분리된 경우
- 질문과 답변이 합쳐진 단일 컬럼인 경우
- 품질 필터링:
- 텍스트 길이 (최소/최대 길이 지정 가능, 활성화/비활성화 가능)
- 언어 감지 (특정 언어 및 신뢰도 임계값 설정 가능, 활성화/비활성화 가능)
- 중복 제거:
- 정확한 중복: 완전히 동일한 텍스트 제거
- 의미론적 중복: Transformer 모델을 사용하여 의미적으로 유사한 텍스트 제거 (유사도 임계값 및 모델 지정 가능)
- 중복 발생 시 남길 기준 선택 가능 ('first': 먼저 나온 데이터, 'longest': 가장 긴 데이터)
- 결과 출력:
- 선별된 데이터를 새로운 CSV 파일로 저장
- 처리 과정 및 통계를 담은 리포트 생성 (HTML 또는 TXT 형식)
- 설정:
config/default_settings.yaml파일을 통해 대부분의 동작을 상세하게 설정 가능하며, CLI 인자 또는 함수 호출 시 오버라이드 가능.
설치 및 환경 설정
1. 환경 준비 (Conda 권장)
새로운 가상 환경을 생성하는 것을 권장합니다. Conda를 사용하는 경우:
conda create --name data-filtering-env python=3.11 # 예시 환경 이름 및 Python 버전
conda activate data-filtering-env
Python 3.11 이상을 권장합니다.
2. 라이브러리 설치
방법 A: PyPI에서 설치 (배포된 경우)
pip install data-filtering
(이 명령어는 라이브러리가 PyPI에 정식 배포된 후에 사용 가능합니다.)
방법 B: 소스에서 직접 빌드 및 설치 (현재 개발/테스트 단계)
-
소스 코드 다운로드 또는 클론:
git clone https://github.com/yourusername/data-filtering.git # 실제 저장소 URL로 변경 cd data-filtering
-
필수 빌드 도구 설치:
pip install build
-
패키지 빌드: 프로젝트 루트 디렉토리에서 다음 명령을 실행합니다.
python -m build
이 명령은
dist디렉토리에.whl파일과.tar.gz파일을 생성합니다. -
빌드된 패키지 설치: 생성된
.whl파일을 사용하여 설치합니다.pip install dist/data_filtering-0.1.0-py3-none-any.whl # 실제 생성된 파일명으로 변경
또는, 개발 중에는 editable 모드로 설치할 수 있습니다:
pip install -e .
3. 의존성 패키지 확인 및 설치
data-filtering 패키지는 필요한 의존성을 자동으로 함께 설치하려고 시도합니다. 주요 의존성은 pyproject.toml 파일의 dependencies 섹션에 명시되어 있습니다.
참고 (PyTorch):
의미론적 중복 제거 기능은 sentence-transformers 라이브러리를 사용하며, 이는 PyTorch에 의존합니다. 대부분의 경우 CPU 버전의 PyTorch가 함께 설치됩니다. GPU 환경이나 특정 버전의 PyTorch가 필요하다면, data-filtering 설치 전에 PyTorch 공식 웹사이트를 참고하여 해당 환경에 맞는 PyTorch를 먼저 설치하는 것이 좋습니다.
사용 방법
라이브러리는 두 가지 주요 방식으로 사용할 수 있습니다: 명령줄 인터페이스(CLI) 또는 Python 코드 내에서 직접 호출.
1. 명령줄 인터페이스 (CLI) 사용
패키지가 올바르게 설치되었다면, 터미널에서 data-filtering-cli 명령어를 사용할 수 있습니다.
기본 사용법:
data-filtering-cli <입력_CSV_파일_경로>
예시:
data-filtering-cli examples/sample_data.csv
주요 옵션:
--config <설정_파일_경로>: 사용자 정의 YAML 설정 파일을 지정합니다. (기본값:config/default_settings.yaml)--q_col <컬럼명>: CSV 파일 내 질문 컬럼명을 지정합니다. (설정 파일 값 오버라이드)--a_col <컬럼명>: CSV 파일 내 답변 컬럼명을 지정합니다. (설정 파일 값 오버라이드)--qa_col <컬럼명>: CSV 파일 내 질문+답변 통합 컬럼명을 지정합니다. (q_col,a_col대신 사용)--encoding <인코딩>: 입력 CSV 파일의 인코딩을 지정합니다. (예:utf-8,cp949)--output_dir <경로>: 결과 파일(선별된 CSV, 리포트)이 저장될 디렉토리를 지정합니다.
CLI 예시:
# 사용자 설정 파일과 함께 실행
data-filtering-cli data/my_qna_data.csv --config config/my_custom_settings.yaml
# 질문/답변 컬럼명 직접 지정 및 출력 디렉토리 변경
data-filtering-cli data/another_data.csv --q_col "Question" --a_col "Answer" --output_dir processed_results
(만약 data-filtering-cli 명령어가 인식되지 않는다면, Python 환경의 bin 또는 Scripts 디렉토리가 시스템 PATH에 올바르게 추가되었는지, 또는 python -m data_filtering.main_processor <입력_CSV_파일_경로> 형태로 직접 모듈을 실행해야 할 수 있습니다.)
2. Python 코드에서 라이브러리로 사용
data_filtering 모듈의 run 함수를 사용하여 Python 스크립트 내에서 필터링 프로세스를 실행할 수 있습니다.
from data_filtering import run
# 기본 설정 사용 (패키지 내부의 default_settings.yaml 사용)
run(input_csv_path="examples/sample_data.csv")
# 사용자 정의 설정 파일 및 일부 옵션 kwargs로 오버라이드
run(
input_csv_path="data/my_qna_data.csv",
config_path="path/to/my_custom_settings.yaml", # 사용자 YAML 파일 경로
output_dir="custom_output", # kwargs로 최상위 설정 오버라이드
deduplication={"semantic_threshold": 0.88} # kwargs로 중첩된 설정 오버라이드
)
# 컬럼명 직접 지정 (config 파일 설정보다 우선)
run(
input_csv_path="data/other_format.csv",
q_col="Inquiry",
a_col="Response"
)
설정 (config/default_settings.yaml)
라이브러리의 세부 동작은 config/default_settings.yaml 파일을 통해 제어됩니다. 주요 설정 항목은 다음과 같습니다:
- 입력 컬럼명 및 인코딩:
q_col,a_col,qa_col,encoding - 출력 디렉토리:
output_dir - 중복 제거 설정 (
deduplication):- 정확/의미론적 중복 제거 활성화 여부 (
enable_exact,enable_semantic) - Sentence Transformer 모델명 또는 로컬 경로 (
semantic_model) - 의미론적 유사도 임계값 (
semantic_threshold) - 중복 시 남길 기준 (
keep_criterion)
- 정확/의미론적 중복 제거 활성화 여부 (
- 품질 필터 설정 (
quality_filters):- 길이 필터 (
length): 활성화 여부 (enable), 최소/최대 길이 (min,max) - 언어 필터 (
language): 활성화 여부 (enable), 목표 언어 (target), 신뢰도 임계값 (confidence_threshold)
- 길이 필터 (
- 리포트 설정 (
report):- 리포트 형식 (
format:html또는txt) - 리포트 파일명 (
filename) - 리포트에 포함할 거부된 샘플 수 (
include_rejected_samples)
- 리포트 형식 (
- 출력 CSV 설정 (
output_csv):- 선별된 데이터 CSV 파일명 (
filename) - 최종 CSV에 포함될 컬럼 목록 (
columns)
- 선별된 데이터 CSV 파일명 (
사용자 정의 설정을 원할 경우, default_settings.yaml 파일을 복사하여 수정 후 --config 옵션이나 run 함수의 config_path 인자로 지정하여 사용하십시오.
디렉토리 구조
.
├── data_filtering/ # 라이브러리 소스 코드 패키지
│ ├── config/ # 기본 설정 파일 디렉토리
│ │ └── default_settings.yaml
│ ├── templates/ # HTML 리포트 템플릿
│ │ └── report_template.html
│ ├── __init__.py
│ ├── data_handler.py
│ ├── duplication_handler.py
│ ├── main_processor.py # CLI 진입점 및 핵심 로직
│ ├── quality_checker.py
│ └── report_generator.py
├── examples/ # 예제 스크립트 및 데이터
│ ├── run_example.py # 라이브러리 사용 예시 Python 스크립트
│ └── sample_data.csv
├── tests/ # 테스트 코드
│ ├── pytest.ini # Pytest 설정 (PYTHONPATH 등)
│ └── ... (각 모듈별 테스트 파일) ...
├── MANIFEST.in # 패키지에 포함할 비-Python 파일 목록
├── pyproject.toml # 빌드 시스템, 프로젝트 메타데이터, 의존성 명시
├── README.md # 현재 파일
├── requirements.txt # 개발 환경용 의존성 목록 (선택적)
└── setup.py # Setuptools 설정 파일
테스트 실행
프로젝트의 기능을 검증하기 위해 pytest를 사용합니다.
-
Conda 환경(
data_filtering-env)을 활성화합니다. -
프로젝트 루트 디렉토리에서 다음 명령을 실행합니다:
pytest
주요 업데이트 사항:
- 라이브러리 이름을
qa-filter에서data-filtering으로 일괄 변경했습니다. - 설치 방법을 PyPI에서 설치하는 방법(배포 후)과 소스에서 직접 빌드 및 설치하는 방법으로 나누어 설명했습니다.
requirements.txt의 역할을 개발 환경용으로 명확히 하고, 패키지 의존성은pyproject.toml에서 관리됨을 암시했습니다.- CLI 명령어 이름을
data-filtering-cli로 변경했습니다. - 설정 파일(
default_settings.yaml)이 패키지 내부(data_filtering/config/)에 포함됨을 명시하고, 사용자가 설정을 변경하는 방법을 더 자세히 설명했습니다. - 디렉토리 구조에서
config폴더의 위치를data_filtering패키지 내부로 수정했습니다.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file data_filtering-0.1.1.tar.gz.
File metadata
- Download URL: data_filtering-0.1.1.tar.gz
- Upload date:
- Size: 25.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65c130195a52d5e6523eee958b0490e3422ac67239926c86069651e1d3a212e4
|
|
| MD5 |
2af17863a0a194d68a6bd9124575523e
|
|
| BLAKE2b-256 |
331cffd6f82a0a3ef18ded18ef6ab368eeebd2dc8565de7feae96d9ad4ddfd04
|
File details
Details for the file data_filtering-0.1.1-py3-none-any.whl.
File metadata
- Download URL: data_filtering-0.1.1-py3-none-any.whl
- Upload date:
- Size: 25.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94a8c9268f9eb9f2e46cf9174b07d0199ae4aa83641783d38a2e11cd23da8dda
|
|
| MD5 |
2fd3140da443933cf62b1c381ac60f16
|
|
| BLAKE2b-256 |
eb4b052d90d7162fbfbf2b78a2f35404653b4603390364be4e219ee994c5a670
|