{ "cells": [ { "cell_type": "code", "id": "initial_id", "metadata": { "collapsed": true, "ExecuteTime": { "end_time": "2026-06-02T00:41:20.159251711Z", "start_time": "2026-06-02T00:41:20.028795255Z" } }, "source": "#### 소비자보호원 서비스집단 분쟁조정 사례집 RAG", "outputs": [], "execution_count": 1 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T02:13:35.759595376Z", "start_time": "2026-06-02T02:13:35.211936875Z" } }, "cell_type": "code", "source": [ "from langchain_ibm import ChatWatsonx\n", "from langchain_core.prompts import PromptTemplate, ChatPromptTemplate\n", "from langchain_core.output_parsers import StrOutputParser, JsonOutputParser, PydanticOutputParser\n", "from dotenv import load_dotenv\n", "import os\n", "\n", "from langchain_community.document_loaders import PyPDFLoader\n", "from langchain_text_splitters import RecursiveCharacterTextSplitter\n", "from langchain_ibm import WatsonxEmbeddings\n", "from langchain_chroma import Chroma\n", "from networkx.algorithms import similarity\n", "\n", "from pydantic import BaseModel, Field\n", "from langchain_core.runnables import RunnablePassthrough\n", "\n", "import re\n", "from pprint import pprint\n", "\n", "from langchain_classic.retrievers import EnsembleRetriever, ContextualCompressionRetriever, BM25Retriever\n", "from langchain_classic.retrievers.self_query.chroma import ChromaTranslator\n", "from langchain_classic.retrievers.self_query.base import SelfQueryRetriever\n", "from langchain_classic.chains.query_constructor.base import AttributeInfo\n", "from langchain_classic.retrievers.document_compressors import LLMChainExtractor" ], "id": "89613f4fba03e277", "outputs": [], "execution_count": 41 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:29.646687589Z", "start_time": "2026-06-02T00:41:29.607549464Z" } }, "cell_type": "code", "source": [ "# .env 내용 가져오기\n", "load_dotenv()\n", "\n", "apikey = os.getenv(\"WATSONX_API_KEY\")\n", "project_id = os.getenv(\"WATSONX_PROJECT_ID\")\n", "watsonx_ai_url = os.getenv(\"WATSONX_URL\")" ], "id": "d17eeb20eda6afa3", "outputs": [], "execution_count": 3 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:32.823321578Z", "start_time": "2026-06-02T00:41:29.650161670Z" } }, "cell_type": "code", "source": [ "watson_llm = ChatWatsonx(\n", " model_id=\"ibm/granite-4-h-small\",\n", " url = f\"{watsonx_ai_url}\",\n", " api_key = f\"{apikey}\",\n", " project_id=f\"{project_id}\",\n", " max_tokens = 2000,\n", " params = {\n", " \"temperature\":0\n", " }\n", ")\n", "\n", "watson_embedding = WatsonxEmbeddings(\n", " model_id=\"ibm/granite-embedding-278m-multilingual\",\n", " url = f\"{watsonx_ai_url}\",\n", " api_key = f\"{apikey}\",\n", " project_id=f\"{project_id}\"\n", ")" ], "id": "f132cf54f019bcfa", "outputs": [], "execution_count": 4 }, { "metadata": {}, "cell_type": "markdown", "source": "### 1. 문서 로드", "id": "3f5ffbefabd51421" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:38.188128946Z", "start_time": "2026-06-02T00:41:32.848865047Z" } }, "cell_type": "code", "source": [ "pdf_path = \"./data/2018 서비스·집단 분쟁조정 사례집.pdf\"\n", "\n", "# loader 선택 - pdf loader 선택 가능\n", "loader = PyPDFLoader(pdf_path)\n", "docs = loader.load()\n", "len(docs)" ], "id": "30842892e90d6b3f", "outputs": [ { "data": { "text/plain": [ "200" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 5 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:38.239702354Z", "start_time": "2026-06-02T00:41:38.215459067Z" } }, "cell_type": "code", "source": [ "# page_content / metadata 확인\n", "\n", "pprint(docs[0].page_content)\n", "pprint(docs[0].metadata)" ], "id": "cec836d370caf7b5", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "'소비자분쟁조정위원회\\n2018\\n서비스·집단 \\n분쟁조정 사례집'\n", "{'author': 'PC_A2',\n", " 'creationdate': '2019-06-05T11:33:24+09:00',\n", " 'creator': 'PScript5.dll Version 5.2.2',\n", " 'moddate': '2019-06-05T11:58:31+09:00',\n", " 'page': 0,\n", " 'page_label': '1',\n", " 'producer': 'Acrobat Distiller 9.0.0 (Windows)',\n", " 'source': './data/2018 서비스·집단 분쟁조정 사례집.pdf',\n", " 'title': '<32303139303630355FBCD2BAF1C0DABFF820BBE7B7CAC1FD5BBCADBAF1BDBA5D5FB3BBC1F65FC6EDC1FDBABB76657231312E687770>',\n", " 'total_pages': 200}\n" ] } ], "execution_count": 6 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:38.267420142Z", "start_time": "2026-06-02T00:41:38.241437174Z" } }, "cell_type": "code", "source": [ "# 첫번째 사건 가져오기\n", "pprint(docs[10].page_content)\n", "pprint(docs[10].metadata)" ], "id": "1b72feac194a7a49", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('제1장\\n'\n", " '일\\n'\n", " '반\\n'\n", " '분\\n'\n", " '쟁\\n'\n", " '조\\n'\n", " '정\\n'\n", " ' 사\\n'\n", " '례 (\\n'\n", " '서\\n'\n", " '비\\n'\n", " '스 )\\n'\n", " '제1장 일반분쟁조정 사례(서비스) ● 3\\n'\n", " '사\\n'\n", " '례 01 사건번호 2018일나565 | 결정일자 2018. 8. 7.\\n'\n", " '세탁 후 갑피 마모 및 경화된 가죽 \\n'\n", " '운동화에 대한 손해배상 요구\\n'\n", " '주 문\\n'\n", " '1. 신청인은 2018. 10. 16.까지 피신청인에게 이 사건 제품(제품명 : ○○○○ 가죽 \\n'\n", " '운동화, 색상 : 흰색) 1켤레를 반환한다. \\n'\n", " '2. 피신청인은 신청인으로부터 제1항 제품을 반환받음과 동시에 신청인에게 71,000원\\n'\n", " '을 지급한다.\\n'\n", " '이 유\\n'\n", " '1. 기초사실\\n'\n", " '가. 신청인은 2017. 6. 6. 가죽 운동화(제품명 : ○○○○ 가죽 운동화, 색상 : 흰색, \\n'\n", " '이하 ‘이 사건 제품’) 1켤레를 160,200원에 구매하여 착화하였고, 2018. 1. 10. \\n'\n", " '피신청인에게 이 사건 제품의 세탁을 의뢰(세탁비 4,000원)하였는데 수령 후 갑피 \\n'\n", " '마모 및 경화된 사실(이하 ‘이 사건 현상’)을 확인하여 피신청인이 재세탁을 하였\\n'\n", " '으나, 이후에도 경화현상만 다소 개선될 뿐 갑피 마모 현상이 개선되지 않아 피신\\n'\n", " '청인에게 손해배상(세탁비 환급 포함)을 요구하였으며, 피신청인은 세탁과실이 없\\n'\n", " '다는 이유로 이를 거부하였다.\\n'\n", " '나. 한국소비자원 신발제품심의위원회 심의 결과는 다음과 같다.\\n'\n", " ' \\n'\n", " '신청인이 주장하는 갑피 벗겨짐(스크래치 등) 증상은 관찰되나 현 제품 상태만\\n'\n", " '으로는 제품 훼손의 원인이 세탁 과정상 발생한 것인지 착화 환경에 따른 문제\\n'\n", " '인지 단정하기 어려운바, 판단 불가하다.')\n", "{'author': 'PC_A2',\n", " 'creationdate': '2019-06-05T11:33:24+09:00',\n", " 'creator': 'PScript5.dll Version 5.2.2',\n", " 'moddate': '2019-06-05T11:58:31+09:00',\n", " 'page': 10,\n", " 'page_label': '11',\n", " 'producer': 'Acrobat Distiller 9.0.0 (Windows)',\n", " 'source': './data/2018 서비스·집단 분쟁조정 사례집.pdf',\n", " 'title': '<32303139303630355FBCD2BAF1C0DABFF820BBE7B7CAC1FD5BBCADBAF1BDBA5D5FB3BBC1F65FC6EDC1FDBABB76657231312E687770>',\n", " 'total_pages': 200}\n" ] } ], "execution_count": 7 }, { "metadata": {}, "cell_type": "markdown", "source": [ "### 전처리\n", "- 정규식을 이용한 내용 추출" ], "id": "ae4c70c9333416ce" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:38.303657115Z", "start_time": "2026-06-02T00:41:38.276957718Z" } }, "cell_type": "code", "source": [ "pattern = (r\"사\\n례\\s*\\d+.*사건번호.*결정일자.*\\d{4}\\.\\s?\\d{1,2}\\.\\s?\\d{1,2}\\.\")\n", "\n", "split_text = re.findall(pattern, \"\".join(docs[10].page_content))\n", "split_text" ], "id": "a785b6b9de3621b8", "outputs": [ { "data": { "text/plain": [ "['사\\n례 01 사건번호 2018일나565 | 결정일자 2018. 8. 7.']" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 8 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:38.337227895Z", "start_time": "2026-06-02T00:41:38.309285473Z" } }, "cell_type": "code", "source": [ "# 패턴이 존재한다면 패턴을 기준으로 문서를 분리\n", "if split_text:\n", " parts = re.split(pattern, \"\".join(docs[10].page_content))\n", "\n", "parts" ], "id": "c99bf389a324e659", "outputs": [ { "data": { "text/plain": [ "['제1장\\n일\\n반\\n분\\n쟁\\n조\\n정\\n 사\\n례 (\\n서\\n비\\n스 )\\n제1장 일반분쟁조정 사례(서비스) ● 3\\n',\n", " '\\n세탁 후 갑피 마모 및 경화된 가죽 \\n운동화에 대한 손해배상 요구\\n주 문\\n1. 신청인은 2018. 10. 16.까지 피신청인에게 이 사건 제품(제품명 : ○○○○ 가죽 \\n운동화, 색상 : 흰색) 1켤레를 반환한다. \\n2. 피신청인은 신청인으로부터 제1항 제품을 반환받음과 동시에 신청인에게 71,000원\\n을 지급한다.\\n이 유\\n1. 기초사실\\n가. 신청인은 2017. 6. 6. 가죽 운동화(제품명 : ○○○○ 가죽 운동화, 색상 : 흰색, \\n이하 ‘이 사건 제품’) 1켤레를 160,200원에 구매하여 착화하였고, 2018. 1. 10. \\n피신청인에게 이 사건 제품의 세탁을 의뢰(세탁비 4,000원)하였는데 수령 후 갑피 \\n마모 및 경화된 사실(이하 ‘이 사건 현상’)을 확인하여 피신청인이 재세탁을 하였\\n으나, 이후에도 경화현상만 다소 개선될 뿐 갑피 마모 현상이 개선되지 않아 피신\\n청인에게 손해배상(세탁비 환급 포함)을 요구하였으며, 피신청인은 세탁과실이 없\\n다는 이유로 이를 거부하였다.\\n나. 한국소비자원 신발제품심의위원회 심의 결과는 다음과 같다.\\n \\n신청인이 주장하는 갑피 벗겨짐(스크래치 등) 증상은 관찰되나 현 제품 상태만\\n으로는 제품 훼손의 원인이 세탁 과정상 발생한 것인지 착화 환경에 따른 문제\\n인지 단정하기 어려운바, 판단 불가하다.']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 9 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:38.379559905Z", "start_time": "2026-06-02T00:41:38.342223586Z" } }, "cell_type": "code", "source": [ "# metadata 로 사용할 정보 추출\n", "# 사례번호, 사건번호, 결정일자 추출\n", "\n", "split_text[0]\n", "\n", "# 사례번호\n", "re.findall(r\"례\\s?(\\d+)\\s?사건번호\",split_text[0])[0]\n" ], "id": "ce6951444d08f2b6", "outputs": [ { "data": { "text/plain": [ "'01'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 10 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:38.413957950Z", "start_time": "2026-06-02T00:41:38.387331264Z" } }, "cell_type": "code", "source": [ "# 사건번호, 결정일자 추출\n", "class CaseMetadata(BaseModel):\n", " case_number:str = Field(description=\"사건번호 예 : 2018일나565\")\n", " decision_data:str = Field(description=\"결정일자 예 : 2018. 8. 7.\")" ], "id": "3307d7b5484784ad", "outputs": [], "execution_count": 11 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:40.384715024Z", "start_time": "2026-06-02T00:41:38.419259931Z" } }, "cell_type": "code", "source": [ "metadata_prompt = PromptTemplate.from_template(\n", " \"\"\"\\\n", "다음은 분쟁 조정 사례에 대한 텍스트입니다.\\n\\n\n", "- case_number : 사건번호\n", "- decision_data : 결정일자\n", "\n", "반드시 Json 으로만 반환하세요\n", "{case_text}\n", " \"\"\"\n", ")\n", "\n", "structed_llm = watson_llm.with_structured_output(CaseMetadata)\n", "\n", "chain = metadata_prompt | structed_llm\n", "\n", "case_metadata = chain.invoke({\"case_text\":split_text[0]})\n", "print(case_metadata)\n", "print(dict(case_metadata))" ], "id": "4e881737f5b80b60", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "case_number='2018일나565' decision_data='2018. 8. 7.'\n", "{'case_number': '2018일나565', 'decision_data': '2018. 8. 7.'}\n" ] } ], "execution_count": 12 }, { "metadata": {}, "cell_type": "markdown", "source": "#### page_content 내용 추출", "id": "12f8b3079b5aaa19" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:40.456254203Z", "start_time": "2026-06-02T00:41:40.420701445Z" } }, "cell_type": "code", "source": [ "# 주 문 ~~~~\n", "parts[1]\n", "\n", "# 주 문 위치 찾기\n", "re.search(r\"주 문\\n\",parts[1]).span()\n", "\n", "# 제목 추출\n", "title = parts[1][:re.search(r\"주 문\\n\",parts[1]).span()[0]].strip()\n", "# 내용 추출\n", "content = parts[1][re.search(r\"주 문\\n\",parts[1]).span()[0]:].strip()" ], "id": "9f78f350f0583c6b", "outputs": [], "execution_count": 13 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:41:40.492951890Z", "start_time": "2026-06-02T00:41:40.457708042Z" } }, "cell_type": "code", "source": [ "pprint(title)\n", "pprint(content)" ], "id": "b460a6f62007935a", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "'세탁 후 갑피 마모 및 경화된 가죽 \\n운동화에 대한 손해배상 요구'\n", "('주 문\\n'\n", " '1. 신청인은 2018. 10. 16.까지 피신청인에게 이 사건 제품(제품명 : ○○○○ 가죽 \\n'\n", " '운동화, 색상 : 흰색) 1켤레를 반환한다. \\n'\n", " '2. 피신청인은 신청인으로부터 제1항 제품을 반환받음과 동시에 신청인에게 71,000원\\n'\n", " '을 지급한다.\\n'\n", " '이 유\\n'\n", " '1. 기초사실\\n'\n", " '가. 신청인은 2017. 6. 6. 가죽 운동화(제품명 : ○○○○ 가죽 운동화, 색상 : 흰색, \\n'\n", " '이하 ‘이 사건 제품’) 1켤레를 160,200원에 구매하여 착화하였고, 2018. 1. 10. \\n'\n", " '피신청인에게 이 사건 제품의 세탁을 의뢰(세탁비 4,000원)하였는데 수령 후 갑피 \\n'\n", " '마모 및 경화된 사실(이하 ‘이 사건 현상’)을 확인하여 피신청인이 재세탁을 하였\\n'\n", " '으나, 이후에도 경화현상만 다소 개선될 뿐 갑피 마모 현상이 개선되지 않아 피신\\n'\n", " '청인에게 손해배상(세탁비 환급 포함)을 요구하였으며, 피신청인은 세탁과실이 없\\n'\n", " '다는 이유로 이를 거부하였다.\\n'\n", " '나. 한국소비자원 신발제품심의위원회 심의 결과는 다음과 같다.\\n'\n", " ' \\n'\n", " '신청인이 주장하는 갑피 벗겨짐(스크래치 등) 증상은 관찰되나 현 제품 상태만\\n'\n", " '으로는 제품 훼손의 원인이 세탁 과정상 발생한 것인지 착화 환경에 따른 문제\\n'\n", " '인지 단정하기 어려운바, 판단 불가하다.')\n" ] } ], "execution_count": 14 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:42:10.626266965Z", "start_time": "2026-06-02T00:41:40.499189125Z" } }, "cell_type": "code", "source": [ "# 사례번호, 사건번호, 결정일자, 제목은 metadata로 추가\n", "# 내용은 page_content update\n", "\n", "pdf_docs = []\n", "case_metadata = {}\n", "\n", "# 사건이 시작되는 페이지 ~ 마지막에서 -2 페이지까지 반복\n", "for doc in docs[10:-2]:\n", "\n", " split_text = re.findall(pattern, \"\".join(doc.page_content))\n", "\n", " if split_text:\n", " # 사례번호 추출\n", " case_metadata[\"case_id\"] = re.findall(r\"례\\s?(\\d+)\\s?사건번호\",split_text[0])[0]\n", "\n", " # 패턴 기준으로 텍스트 분할\n", " parts = re.split(pattern, \"\".join(doc.page_content))\n", "\n", " if re.search(r\"주 문\\n\",parts[1]):\n", " # 제목 추출\n", " case_metadata[\"title\"] = parts[1][:re.search(r\"주 문\\n\",parts[1]).span()[0]].replace(\"\\n\",\"\").strip()\n", " # 내용 추출 후 기존 내용 업데이트\n", " doc.page_content = parts[1][re.search(r\"주 문\\n\",parts[1]).span()[0]:].strip()\n", " else:\n", " case_metadata[\"title\"] = \"\"\n", "\n", " i = 0\n", " while i < 10:\n", " try:\n", " # 사건번호, 결정일자 추출\n", " response = chain.invoke({\"case_text\":split_text[0]})\n", " for k, v in dict(response).items():\n", " case_metadata[k] = v.replace(\"\\n\",\"\").replace(\" \",\"\")\n", " break\n", "\n", " except:\n", " i += 1\n", " continue\n", "\n", " doc.metadata.update(case_metadata)\n", "\n", " pdf_docs.append(doc)\n", " else:\n", " doc.metadata.update(case_metadata)\n", " pdf_docs.append(doc)\n", "\n", "len(pdf_docs)\n" ], "id": "373a5284a8b88e6b", "outputs": [ { "data": { "text/plain": [ "188" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 15 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:42:10.675760564Z", "start_time": "2026-06-02T00:42:10.652738035Z" } }, "cell_type": "code", "source": [ "pdf_docs[10].metadata\n", "pprint(pdf_docs[9].page_content)" ], "id": "66a5877582de43f3", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('주 문\\n'\n", " '신청인과 피신청인 사이의 이 사건 분쟁조정 신청에 대하여는 조정하지 아니한다.\\n'\n", " '이 유\\n'\n", " '1. 기초사실\\n'\n", " '신청인은 피신청인의 인천-도쿄 왕복항공권 4매(탑승객 : 이○○, 오○○, 이 ∆∆, 이\\n'\n", " '□□, 2017. 12. 18. 10:10 ○○703편 인천 출발, 2017. 12. 21. 17:00 ○○002 편 \\n'\n", " '도쿄 출발)를 628,200원에 구입하였고, 2018. 12. 18. 10:10 출발 예정이던 출국 항\\n'\n", " '공편(이하 ‘이 사건 항공편’이라고 함)이 기상악화로 인하여 지연되어 도착예정시간 \\n'\n", " '12:30보다 4시간 10분 지연된 16:40 도쿄에 도착하였다.\\n'\n", " '2 . 판 단\\n'\n", " '신청인은 이 사건 항공편이 4시간 이상 지연되었고, 이 사건 항공편보다 늦게 출발이 \\n'\n", " '예정되어 있는 항공기(오사카, 나고야행 등)가 먼저 출발하는 것을 확인하였으며, 기상\\n'\n", " '상황으로 인한 연결편 연착에 따른 지연이라는 피신청인의 주장을 납득할 수 없는바, \\n'\n", " '관련 법률에 따른 손해배상을 요구한다.\\n'\n", " '이에 대하여 피신청인은 이 사건 항공편 운송지연의 원인이 당시 인천공항에 강설로 \\n'\n", " '인한 극심한 혼잡과 제빙작업에 의한 것으로, 이는 기상상황으로 인한 지연에 해당하\\n'\n", " '여 「소비자분쟁해결기준」상 손해배상 사유에서 제외되는바, 신청인의 요구를 수용할 \\n'\n", " '수 없다고 주장한다.')\n" ] } ], "execution_count": 16 }, { "metadata": {}, "cell_type": "markdown", "source": "#### 2. 분할", "id": "824f2e5d6e5c66e9" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:42:10.720885669Z", "start_time": "2026-06-02T00:42:10.679400312Z" } }, "cell_type": "code", "source": [ "# 500 / 50\n", "\n", "splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)\n", "splite_docs = splitter.split_documents(docs)\n", "\n", "print(splite_docs[0].page_content)" ], "id": "baa5c4785395d7cb", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "소비자분쟁조정위원회\n", "2018\n", "서비스·집단 \n", "분쟁조정 사례집\n" ] } ], "execution_count": 17 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:42:10.765133710Z", "start_time": "2026-06-02T00:42:10.729124659Z" } }, "cell_type": "code", "source": "print(splite_docs[1].page_content)", "id": "b398473d9c9a0655", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2018 분쟁조정 사례집\n", "소비자 관련 분쟁은 소액이라는 특징 때문에 법원의 소송으로 해결하기 어려운 면이 있습니다. 이러한 점 때문에 \n", "소송 외 분쟁해결기구로서 설립된 소비자분쟁조정위원회는 원만한 합의가 이루어지지 않은 소비자와 사업자에게 \n", "객관적이고 공정한 조정안을 제시함으로써 분쟁이 합리적이고 원활히 해결될 수 있도록 노력하고 있습니다.\n", "소비자기본법에 근거하여 1987년 설립된 소비자분쟁조정위원회는 설립 첫 해 20건의 사건 조정을 시작으로, 2004년 \n", "이후부터는 매년 1,000건이 넘는 사건을 조정하였으며, 2018년에는 3,080여건을 처리하는 등 그 역할을 충실히 \n", "수행하고 있습니다.\n", "특히, 분쟁조정 사건을 신속하고 공정하게 처리하기 위해 2017년에는 소비자기본법 개정을 통해 조정위원을 50명\n", "에서 150명으로 확대하는 등 관련 법·제도 개선으로 소비자권익증진에 기여하고 있습니다.\n" ] } ], "execution_count": 18 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T00:42:10.791997662Z", "start_time": "2026-06-02T00:42:10.773706380Z" } }, "cell_type": "code", "source": [ "# 마침표 뒤에 나오는 줄바꿈 문자는 그대로 두고 나머지 줄바꿈 문자만 제거\n", "pprint(splite_docs[18].page_content)\n", "\n", "text = splite_docs[18].page_content\n", "text = re.sub(r'(? 벡터화 => 가장 가까운 chunks 찾기 => Document 객체 => format_docs => context => llm context 기반으로 답변 정리\n", "\n", "chain = {\"context\" : retriever | format_docs, \"query\" : RunnablePassthrough()} | rag_prompt | watson_llm | StrOutputParser()\n", "\n", "query = \"세탁 후 오염에 대한 손해배상은 어떻게 이루어지나요?\"\n", "response = chain.invoke(query)" ], "id": "e9b4f6c7b79d2f54", "outputs": [], "execution_count": 35 }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T02:05:45.881280476Z", "start_time": "2026-06-02T02:05:45.871725901Z" } }, "cell_type": "code", "source": "response", "id": "3dc22580df212897", "outputs": [ { "data": { "text/plain": [ "'세탁 후 오염에 대한 손해배상은 일반적으로 세탁업자와 고객 간의 계약 조건, 세탁업 표준약관, 그리고 관련 법규에 따라 이루어집니다. 세탁 후 오염이 발생한 경우, 손해배상 여부와 그 범위는 다음과 같은 요소들을 고려하여 결정됩니다:\\n\\n1. **계약 조건**: 고객과 세탁업자 간의 계약서나 약관에 명시된 조건이 손해배상 여부를 결정하는 데 중요한 역할을 합니다. 예를 들어, 계약서에 세탁 중 발생하는 손상에 대한 책임이 세탁업자에게 있다고 명시되어 있다면, 세탁업자는 해당 손해에 대해 배상해야 할 수 있습니다.\\n\\n2. **세탁업 표준약관**: 많은 세탁업체들은 세탁업 표준약관을 통해 세탁 서비스의 범위와 책임을 명확히 합니다. 이 약관에는 세탁 중 발생할 수 있는 손상에 대한 처리 방법과 책임 소재가 규정되어 있습니다. 예를 들어, \"세탁업 표준약관\"에서는 세탁업자의 책임있는 사유로 세탁물이 손상, 색상변화, 얼룩 등의 하자가 발생했을 때 세탁업자가 해당 세탁물에 대하여 세탁요금을 청구하지 못한다고 규정하고 있습니다.\\n\\n3. **법적 규정**: 소비자 보호를 위한 법률이나 규정도 손해배상 여부에 영향을 미칠 수 있습니다. 소비자분쟁해결기준 등 관련 법규는 소비자와 세탁업자 간의 분쟁 해결을 위한 기준을 제공하며, 이를 통해 손해배상의 범위와 조건이 결정될 수 있습니다.\\n\\n4. **손해의 원인**: 손해가 세탁 과정에서 발생한 것인지, 아니면 고객의 착화 과정에서 발생한 것인지에 따라 책임 소재가 달라질 수 있습니다. 세탁업자가 세탁 과정에서 발생한 손해에 대해 책임을 지게 될 경우, 손해배상이 이루어질 수 있습니다.\\n\\n5. **손해의 정도**: 손해의 정도와 범위도 손해배상 여부와 그 범위를 결정하는 데 중요한 요소입니다. 손해가 미미한 경우에는 배상이 면제될 수 있으며, 심각한 손해의 경우에는 전액 또는 일부의 배상이 이루어질 수 있습니다.\\n\\n세탁 후 오염에 대한 손해배상이 이루어지려면, 고객은 세탁업자에게 손해의 사실과 원인을 명확히 밝히고, 관련 증거를 제시해야 합니다. 세탁업자는 이러한 요청에 대해 적절히 대응하며, 법적 책임이 있다고 판단되는 경우에는 손해배상을 진행해야 합니다.'" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 40 }, { "metadata": {}, "cell_type": "markdown", "source": [ "### BM25 (SParse Retrieval)\n", "- 키워드 검색" ], "id": "d5307bef36609201" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T02:16:09.701751350Z", "start_time": "2026-06-02T02:16:09.659449106Z" } }, "cell_type": "code", "source": [ "bm25_retriever = BM25Retriever.from_documents(final_docs)\n", "bm25_retriever.k = 5\n", "\n", "docs = bm25_retriever.invoke(\"가죽 운동화 세탁 손해배상\")\n", "\n", "for doc in docs:\n", " print(doc.metadata['case_id'], doc.page_content[:500])\n", " print(\"-----\")\n" ], "id": "45f404869943b3a9", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "4 ● 2018 서비스·집단 분쟁조정 사례집2 . 판 단신청인은 피신청인의 세탁 후 신발의 갑피가 마모되고 경화되는 현상이 발생하였고, 재세탁 이후에도 경화현상만 다소 개선될 뿐 갑피 마모 현상이 개선되지 않았으며, 이 사건 제품보다 더 오래신은 비슷한 흰색 가죽 운동화의 상태보다 이 사건 제품의 상태가 더 좋지 않기 때문에 본인의 착화습관이 이 사건 현상의 원인이라고 볼 수도 없으므로, 세탁과실에 따른 손해배상 및 세탁비 환급을 요구한다.\n", "이에 대하여 피신청인은 이 사건 제품을 인수하였을 당시 이미 제품 상태가 좋지 않았고, 한국소비자원의 신발제품심의위원회에서도 세탁과실로 인정하지 않았기 때문에 신청인의 요구를 수용할 수 없으나, 다만 원만한 해결을 위해 피해구제 담당자가 제시한 배상산정액 112,140원의 50%인 50,670원을 환급할 의사는 있다고 주장한다.\n", "살피건\n", "-----\n", "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "나. 한국소비자원 신발제품심의위원회 심의 결과는 다음과 같다.\n", " 신청인이 주장하는 갑피 벗겨짐(스크래치 등) 증상은 관찰되나 현 제품 상태만으로는 제품 훼손의 원인이 세탁 과정상 발생한 것인지 착화 환경에 따른 문제인지 단정하기 어려운바, 판단 불가하다.\n", "-----\n", "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "살피건대, 피신청인은 세탁 전부터 이 사건 제품의 상태가 좋지 않았다고 주장하나, 다음과 같은 사정들, 즉 ① 피신청인이 세탁을 위해 이 사건 제품을 인수하면서 세탁물의 하자유무가 작성된 인수증을 교부하지 않은 점, ② 「세탁업 표준약관」 제3조 제1항은 인수증 미교부로 인해 발생한 손해 및 그에 따른 손해배상책임은 세탁업자에게 귀속되는 것으로 규정하고 있는 점, ③ 인수 당시 이 사건 제품에 이미 하자가 있었음을 입증할 만한 객관적인 자료가 없는 점 등에 비추어 볼 때, 피신청인의 위 주장은 이유 없으므로, 피신청인은 「소비자분쟁해결기준」에 따라 이 사건 제품의 잔존가치 112,140원(= 구매대금 160,200원 × 70%)을 배상함이 상당하다.\n", "다만, 한국소비자원 신발제품심의위원회의 심의 결과, 이 사건 현상이 피신청인의 세탁과실로 단정할 수 없다고 판단된 점, 신청인이 \n", "-----\n", "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "주 문1. 신청인은 2018. 10. 16.까지 피신청인에게 이 사건 제품(제품명 : ○○○○ 가죽 운동화, 색상 : 흰색) 1켤레를 반환한다. 2. 피신청인은 신청인으로부터 제1항 제품을 반환받음과 동시에 신청인에게 71,000원을 지급한다.\n", "이 유1. 기초사실가. 신청인은 2017. 6. 6. 가죽 운동화(제품명 : ○○○○ 가죽 운동화, 색상 : 흰색, 이하 ‘이 사건 제품’) 1켤레를 160,200원에 구매하여 착화하였고, 2018. 1. 10. 피신청인에게 이 사건 제품의 세탁을 의뢰(세탁비 4,000원)하였는데 수령 후 갑피 마모 및 경화된 사실(이하 ‘이 사건 현상’)을 확인하여 피신청인이 재세탁을 하였으나, 이후에도 경화현상만 다소 개선될 뿐 갑피 마모 현상이 개선되지 않아 피신청인에게 손해배상(세탁비 환급 포함)을 요구하였으며, 피신청인은 세탁과실이 없다는 이유\n", "-----\n", "32 ### 이 사건은 '식당에서 분실된 신발에 대한 배상 요구 에 대한 사례입니다.\n", "\n", "의 비율에 의한 지연손해금을 가산하여 지급함이 상당하다.\n", "[소비자분쟁해결기준에 따른 배상액] 운동화 사용 일수(2016. 9. 13. ~ 2016. 12. 13.) : 92일 배상비율표에 의한 배상비율 : 60% 배상액 : 운동화 구입 금액(109,000원) × 배상비율(60%) = 65,400원[관련 법규 및 고시] 상법 제54조, 제152조, 소비자기본법 시행령 제9조, 소비자분쟁해결기준 별표 II 품목별 해결기준 23. 세탁업, 별표 III 품목별 품질보증기간 및 부품보유기간이상과 같은 이유로 주문과 같이 결정한다.\n", "-----\n" ] } ], "execution_count": 42 }, { "metadata": {}, "cell_type": "markdown", "source": "- 시맨틱 검색 + 키워드 검색", "id": "34083fa980d37f7e" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T02:20:44.719245581Z", "start_time": "2026-06-02T02:20:42.173247275Z" } }, "cell_type": "code", "source": [ "ensemble_retriever = EnsembleRetriever(retrievers =[bm25_retriever, retriever], weight=[0.7, 0.3])\n", "\n", "docs = ensemble_retriever.invoke(\"가죽 운동화 세탁 손해배상\")\n", "\n", "for doc in docs:\n", " print(doc.metadata['case_id'], doc.page_content[:500])\n", " print(\"-----\")\n" ], "id": "d53f475849d789a1", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "4 ● 2018 서비스·집단 분쟁조정 사례집2 . 판 단신청인은 피신청인의 세탁 후 신발의 갑피가 마모되고 경화되는 현상이 발생하였고, 재세탁 이후에도 경화현상만 다소 개선될 뿐 갑피 마모 현상이 개선되지 않았으며, 이 사건 제품보다 더 오래신은 비슷한 흰색 가죽 운동화의 상태보다 이 사건 제품의 상태가 더 좋지 않기 때문에 본인의 착화습관이 이 사건 현상의 원인이라고 볼 수도 없으므로, 세탁과실에 따른 손해배상 및 세탁비 환급을 요구한다.\n", "이에 대하여 피신청인은 이 사건 제품을 인수하였을 당시 이미 제품 상태가 좋지 않았고, 한국소비자원의 신발제품심의위원회에서도 세탁과실로 인정하지 않았기 때문에 신청인의 요구를 수용할 수 없으나, 다만 원만한 해결을 위해 피해구제 담당자가 제시한 배상산정액 112,140원의 50%인 50,670원을 환급할 의사는 있다고 주장한다.\n", "살피건\n", "-----\n", "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "주 문1. 신청인은 2018. 10. 16.까지 피신청인에게 이 사건 제품(제품명 : ○○○○ 가죽 운동화, 색상 : 흰색) 1켤레를 반환한다. 2. 피신청인은 신청인으로부터 제1항 제품을 반환받음과 동시에 신청인에게 71,000원을 지급한다.\n", "이 유1. 기초사실가. 신청인은 2017. 6. 6. 가죽 운동화(제품명 : ○○○○ 가죽 운동화, 색상 : 흰색, 이하 ‘이 사건 제품’) 1켤레를 160,200원에 구매하여 착화하였고, 2018. 1. 10. 피신청인에게 이 사건 제품의 세탁을 의뢰(세탁비 4,000원)하였는데 수령 후 갑피 마모 및 경화된 사실(이하 ‘이 사건 현상’)을 확인하여 피신청인이 재세탁을 하였으나, 이후에도 경화현상만 다소 개선될 뿐 갑피 마모 현상이 개선되지 않아 피신청인에게 손해배상(세탁비 환급 포함)을 요구하였으며, 피신청인은 세탁과실이 없다는 이유\n", "-----\n", "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "나. 한국소비자원 신발제품심의위원회 심의 결과는 다음과 같다.\n", " 신청인이 주장하는 갑피 벗겨짐(스크래치 등) 증상은 관찰되나 현 제품 상태만으로는 제품 훼손의 원인이 세탁 과정상 발생한 것인지 착화 환경에 따른 문제인지 단정하기 어려운바, 판단 불가하다.\n", "-----\n", "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "살피건대, 피신청인은 세탁 전부터 이 사건 제품의 상태가 좋지 않았다고 주장하나, 다음과 같은 사정들, 즉 ① 피신청인이 세탁을 위해 이 사건 제품을 인수하면서 세탁물의 하자유무가 작성된 인수증을 교부하지 않은 점, ② 「세탁업 표준약관」 제3조 제1항은 인수증 미교부로 인해 발생한 손해 및 그에 따른 손해배상책임은 세탁업자에게 귀속되는 것으로 규정하고 있는 점, ③ 인수 당시 이 사건 제품에 이미 하자가 있었음을 입증할 만한 객관적인 자료가 없는 점 등에 비추어 볼 때, 피신청인의 위 주장은 이유 없으므로, 피신청인은 「소비자분쟁해결기준」에 따라 이 사건 제품의 잔존가치 112,140원(= 구매대금 160,200원 × 70%)을 배상함이 상당하다.\n", "다만, 한국소비자원 신발제품심의위원회의 심의 결과, 이 사건 현상이 피신청인의 세탁과실로 단정할 수 없다고 판단된 점, 신청인이 \n", "-----\n", "01 ### 이 사건은 '세탁 후 갑피 마모 및 경화된 가죽 운동화에 대한 손해배상 요구 에 대한 사례입니다.\n", "\n", "탁과실로 단정할 수 없다고 판단된 점, 신청인이 착화 과정에서 이 사건 제품을 훼손하여 그 손해가 발생 및 확대되었을 가능성을 배제할 수 없는 점 등에 비추어 볼 때, 손해의 공평·타당한 분담이라는 손해배상 제도의 지도이념과 상호 양보를 통한 분쟁의 원만한 해결이라는 조정의 취지를 고려하여, 피신청인의 책임을 60%로 제한함이 상당하다.\n", "한편, 세탁비와 관련하여,「세탁업 표준약관」제9조 제1항 및 제2항에서는 세탁업자의 책임있는 사유로 세탁물이 손상, 색상변화, 얼룩 등의 하자가 발생였을 때에는 해당 세탁물에 대하여 세탁업자는 고객에게 세탁요금을 청구하지 못하므로, 세탁업자인 피신청인이 세탁비 4,000원을 신청인에게 환급이 상당하다.\n", "이상을 종합하면, 신청인은 피신청인에게 이 사건 제품을 반환하고 피신청인은 손해배상액 67,000원(112,140원 × 60%, 1,000원 미\n", "-----\n", "32 ### 이 사건은 '식당에서 분실된 신발에 대한 배상 요구 에 대한 사례입니다.\n", "\n", "의 비율에 의한 지연손해금을 가산하여 지급함이 상당하다.\n", "[소비자분쟁해결기준에 따른 배상액] 운동화 사용 일수(2016. 9. 13. ~ 2016. 12. 13.) : 92일 배상비율표에 의한 배상비율 : 60% 배상액 : 운동화 구입 금액(109,000원) × 배상비율(60%) = 65,400원[관련 법규 및 고시] 상법 제54조, 제152조, 소비자기본법 시행령 제9조, 소비자분쟁해결기준 별표 II 품목별 해결기준 23. 세탁업, 별표 III 품목별 품질보증기간 및 부품보유기간이상과 같은 이유로 주문과 같이 결정한다.\n", "-----\n" ] } ], "execution_count": 43 }, { "metadata": {}, "cell_type": "markdown", "source": "### SelfQuery", "id": "9be2a3648e816d7b" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T02:44:44.850642254Z", "start_time": "2026-06-02T02:44:41.061100519Z" } }, "cell_type": "code", "source": [ "metadata_field_info = [\n", " AttributeInfo(\n", " name=\"case_id\", description=\"사건번호\", type =\"string\"\n", " ),\n", " AttributeInfo(\n", " name=\"title\", description=\"사건제목\", type =\"string\"\n", " ),\n", " AttributeInfo(\n", " name=\"decision_date\", description=\"결정일자\", type =\"string\"\n", " ),\n", "]\n", "\n", "self_retriever = SelfQueryRetriever.from_llm(llm = watson_llm, vectorstore=vectorstore, document_contents=\"소비자 분쟁 사례\", metadata_field_info=metadata_field_info, structured_query_translator = ChromaTranslator())\n", "\n", "docs = self_retriever.invoke(\"32번 사례를 보여줘\")\n", "\n", "for doc in docs:\n", " print(doc.metadata['case_id'], doc.page_content[:500])\n", " print(\"-----\")" ], "id": "2f14e6821c8047ea", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "32 ### 이 사건은 '식당에서 분실된 신발에 대한 배상 요구 에 대한 사례입니다.\n", "\n", "대물에 대해 책임이 없음을 알린 경우에도 물건의 멸실로 인한 손해를 배상할 책임을 면하지 못하므로, 신청인에게 운동화 분실에 따른 손해를 배상하여야 한다.\n", "다만, 신청인은 자신의 신발을 누구나 접근할 수 있는 개방된 신발장에 비치하면서 분실 가능성이 있음을 충분히 예상할 수 있었고, 피신청인이 비치한 비닐봉지를 이용하여 자신의 신발을 다른 신발과 구분하는 등 주의를 기울일 필요가 있었음에도 어떠한 조치도 취하지 아니하였으므로, 이러한 신청인의 부주의를 고려하여 피신청인의 책임을 50%로 제한하기로 한다. 그렇다면, 피신청인은 2017. 12. 26.까지 신청인에게 「소비자분쟁해결기준」에 따라 산정한 배상액 65,400원의 50%에 해당하는 32,700원을 지급하고, 만일 지급을 지체하면 위 돈에 대하여 2017. 12. 27.부터 다 갚는 날까지 「상법」제54조에 따라 연 6%의 비율에 의한 지연손해금\n", "-----\n", "32 ### 이 사건은 '식당에서 분실된 신발에 대한 배상 요구 에 대한 사례입니다.\n", "\n", "주 문1. 피신청인은 2017. 12. 26.까지 신청인에게 32,700원을 지급한다.\n", "2. 만일 피신청인이 제1항의 지급을 지체하면 2017. 12. 27.부터 다 갚는 날까지 연 6% 비율에 의한 돈을 가산하여 지급한다.\n", "이 유1. 기초사실신청인은 2016. 12. 13. 피신청인의 식당에서 식사 후 신발(구입일자 : 2016. 9. 13., 구입가격 : 109,000원, 이하 ‘이 사건 신발’이라고 함)을 분실하여 이에 대한 손해배상을 요구하였으나 피신청인이 이를 거부하였다.\n", "2 . 판 단신청인은 피신청인이 이 사건 신발의 분실을 인정하면서도 책임을 회피하고 있는바, 이에 대한 배상을 요구한다. 이에 대하여 피신청인은 식당 입구에 신발 분실을 주의할 것을 고지하고 신발을 보관하기 위한 비닐 봉투 등을 비치하였는바, 배상 책임이 없다고 주장한다.\n", "살피건대, 공중접객업자는 자기 또는 그 사용인이\n", "-----\n", "32 ### 이 사건은 '식당에서 분실된 신발에 대한 배상 요구 에 대한 사례입니다.\n", "\n", "의 비율에 의한 지연손해금을 가산하여 지급함이 상당하다.\n", "[소비자분쟁해결기준에 따른 배상액] 운동화 사용 일수(2016. 9. 13. ~ 2016. 12. 13.) : 92일 배상비율표에 의한 배상비율 : 60% 배상액 : 운동화 구입 금액(109,000원) × 배상비율(60%) = 65,400원[관련 법규 및 고시] 상법 제54조, 제152조, 소비자기본법 시행령 제9조, 소비자분쟁해결기준 별표 II 품목별 해결기준 23. 세탁업, 별표 III 품목별 품질보증기간 및 부품보유기간이상과 같은 이유로 주문과 같이 결정한다.\n", "-----\n", "32 ### 이 사건은 '식당에서 분실된 신발에 대한 배상 요구 에 대한 사례입니다.\n", "\n", "제1장일반분쟁조정 사례 (서비스 )제1장 일반분쟁조정 사례(서비스) ● 89피신청인이 운영하는 식당은 이용하는 고객들이 자신의 신발을 벗어 신발장에 둔 다음 식당 내로 들어가는 구조로 이루어져 있어 위 신발장은 고객들이 관리할 수 있는 영역이라기보다 피신청인의 관리 영역이라고 볼 수 있고, 따라서 신발장에 둔 신발에 대해서는 공중접객업자인 피신청인이 고객인 신청인으로부터 임치받았다고 봄이 상당하다.\n", "피신청인은 고객으로부터 임치받은 물건이 멸실 또는 훼손되지 않도록 관리할 책임이 있음에도 시건장치를 갖춘 신발장을 설치하는 등의 조치 없이 식당 입구에 비닐봉지를 비치하고 주의 문구를 표시한 정도만으로는 임치 받은 신발의 보관에 관하여 주의를 게을리 하지 아니하였다고 보기에 부족하고, 「상법」제152조 제3항에 따라 고객의 휴대물에 대해 책임이 없음을 알린 경우에도 물건의 멸실로 인한 손해를 배상할 책임을\n", "-----\n" ] } ], "execution_count": 44 }, { "metadata": {}, "cell_type": "markdown", "source": [ "일반 검색 : k=5\n", "5 * 500chunk = 2500자 전달\n", "2500 전달 대신 질문과 관련있는 한두문장만 찾기 => LLMChainExtractor" ], "id": "f801b49c654e900d" }, { "metadata": { "ExecuteTime": { "end_time": "2026-06-02T02:54:24.781272089Z", "start_time": "2026-06-02T02:54:21.055451974Z" } }, "cell_type": "code", "source": [ "compressor = LLMChainExtractor.from_llm(watson_llm)\n", "\n", "compression_retriever = (ContextualCompressionRetriever(\n", " base_compressor=compressor,\n", " base_retriever=ensemble_retriever,\n", "))\n", "\n", "docs = compression_retriever.invoke(\"식당에서 분실된 신발에 대한 손해배상은 어떻게?\")\n", "\n", "for doc in docs:\n", " print(doc.metadata['case_id'], doc.page_content[:500])\n", " print(\"-----\")" ], "id": "e66e9916bf610511", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "32 ### 이 사건은 '식당에서 분실된 신발에 대한 배상 요구 에 대한 사례입니다.\n", "\n", "살피건대, 공중접객업자는 자기 또는 그 사용인이 고객으로부터 임치(任置)받은 물건의 보관에 관하여 주의를 게을리하지 아니하였음을 증명하지 아니하면 그 물건의 멸실 또는 훼손으로 인한 손해를 배상할 책임이 있다.\n", "-----\n" ] } ], "execution_count": 49 }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", "id": "c499013efca7c5a9" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }