EmpathemeBot_dev / src /processing /chunk_documents.py
tktm8's picture
Upload 59 files
fb05e78 verified
import argparse
import json
import logging
from langchain_core.documents import Document
from langchain_text_splitters import CharacterTextSplitter
logger = logging.getLogger(__name__)
def chunk_documents(input_file_path: str, output_file_path: str):
"""
JSONファイルをロードし、ドキュメントをチャンクに分割して、新しいJSONファイルに保存します。
"""
# テキスト分割を初期化します
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=50)
# 入力JSONファイルからドキュメントを読み込みます
with open(input_file_path, 'r', encoding='utf-8') as f:
documents_data = json.load(f)
chunked_documents = []
for doc_data in documents_data:
page_content = doc_data.get("page_content", "")
metadata = doc_data.get("metadata", {})
# page_contentをチャンクに分割します
splits_texts = text_splitter.split_text(page_content)
# 分割ごとに新しいドキュメントチャンクを作成します
for i, text in enumerate(splits_texts):
chunk_metadata = metadata.copy()
chunk_metadata['chunk_index'] = i
chunked_doc = {
"metadata": chunk_metadata,
"page_content": text
}
chunked_documents.append(chunked_doc)
# チャンク化されたドキュメントを出力JSONファイルに保存します
with open(output_file_path, 'w', encoding='utf-8') as f:
json.dump(chunked_documents, f, ensure_ascii=False, indent=2)
logger.info(f"{len(documents_data)}個のドキュメントを{len(chunked_documents)}個のチャンクに正常に分割しました。")
logger.info(f"出力は {output_file_path} に保存されました")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="JSONファイルからドキュメントをチャンク化します。")
parser.add_argument("input_file", help="入力JSONファイルのパス (例: documents.json)。")
parser.add_argument("output_file", help="出力JSONファイルのパス (例: chunks.json)。")
args = parser.parse_args()
chunk_documents(args.input_file, args.output_file)