IT&컴퓨터/IT 인터넷

CSVLoader java & python version (LLM & RAG 에 활용)

누한 2024. 5. 12. 21:18
반응형

Python 에는 파일을 컨트롤하는 다양한 라이브러리가 있습니다.

 

Langchain 에서 제공하는 CSVLoader 에 대해서 간단히 정리하고

Python & java 버전의 구현샘플을 소개합니다.

 

물론, 오픈소스 라이브러리를 이용한 개인적인 구현이므로, 제가 소개하는 것외에 다른 방식도 얼마든지 있습니다.

 

 

 

 

샘플 코드 소개를 위해 먼제 예시가 되는 CSV 파일과 샘플 코드 출력 결과를 소개합니다.

아래와 같이 키&값 의 셋으로 구성되는 형태로 CSV 의 내용을 맵핑하게됩니다.

 

 

[CSV]

question, answer
오늘의 날씨는, 나도 몰라요
당신은 누구세요, 글쎄요

 

 

[output]

question: 오늘의 날씨는
answer: 나도 몰라요

question: 당신은 누구세요
answer: 글쎄요

 

 

 

Python CSVLoader

간단한 csvloader 샘플입니다.

Python 으로 이용할 경우 너무도 간단히 구현이 가능합니다.

아래의 몇 줄의  코드만으로 위에 정의한 output 형태로 구현이 가능합니다.

python 으로 테스트하면서 좋은점이 이런 단순한 코드의 가능이라고 생각이 들정도로요

 

참고로 python 에서 langchain 라이브러리가 설치되어 있어야 합니다.

 

[pip install]

pip install langchain

 

 

 

[CSVLoader Python version]

from langchain_community.document_loaders.csv_loader import CSVLoader

loader = CSVLoader(file_path='filename.csv', encoding='cp949')
data = loader.load()

 

 

 

 

Java CSVLoader

이번에는 java 버전입니다.

그런데 좀 코드가 길어집니다. 어쩔수 없습니다. 원래 그런걸요

 

java 버전을 사용하기 위해서는 python 의 langchain 처럼 java에서 제공하는 라이브러리가 필요합니다.

 

아래 샘플에서는 opencsv 라는 라이브러리를 사용했으며, java maven 프로젝트로 구성했습니다.

그리고 전체 코드를 제공합니다. python은 위에 코드만 있어도 다양한 환경에서 테스트가 가능합니다.

 

maven 이 아닌 다른 방식의 테스트는 각자 알아서....

 

 

[opencsv 참고]

https://mvnrepository.com/artifact/com.opencsv/opencsv

 

 

[opencsv maven dependency]

<!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
<dependency>
    <groupId>com.opencsv</groupId>
    <artifactId>opencsv</artifactId>
    <version>5.9</version>
</dependency>

 

 

[CSVLoader java version]

import com.opencsv.CSVReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

public class openscv_test2 {
    public static void main(String[] args) {
        try (CSVReader reader = new CSVReader(new FileReader("filename.csv"))) {
            // 첫 번째 행을 헤더로 읽기
            String[] headers = reader.readNext();
            if (headers == null) {
                throw new IllegalStateException("CSV no header");
            }

            // 각 행을 읽어서 Map으로 변환
            String[] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                if (nextLine.length < headers.length) {
                    throw new IllegalStateException("행의 열 수가 헤더의 열 수보다 적습니다.");
                }
                
                Map<String, String> values = new HashMap<>();
                for (int i = 0; i < headers.length; i++) {
                    values.put(headers[i], nextLine[i]);
                }
                
                // 전체 행 출력
                System.out.println(values);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

여기까지 입니다. 모두 즐거운 하루 되세요.

반응형