Spaces:
Sleeping
Sleeping
File size: 2,292 Bytes
fb05e78 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
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)
|