|
|
"""単一URLのスクレイピング→メタデータ生成処理""" |
|
|
|
|
|
from pathlib import Path |
|
|
from typing import Dict, Any, Optional |
|
|
|
|
|
from src.processing.metadata_utils import extract_title, generate_file_name |
|
|
from src.scraping import io |
|
|
from src.scraping import pipeline as scraping_pipeline |
|
|
|
|
|
class DocumentProcessor: |
|
|
"""単一URLのスクレイピング→メタデータ生成処理""" |
|
|
|
|
|
async def process_url(self, url: str, index: int, save_dir: Optional[Path] = None) -> Dict[str, Any]: |
|
|
""" |
|
|
URLから直接メタデータを生成 |
|
|
save_dirが指定されている場合はMarkdownファイルも保存 |
|
|
|
|
|
Args: |
|
|
url: 処理対象のURL |
|
|
index: URLのインデックス番号 |
|
|
save_dir: Markdownファイルの保存先ディレクトリ(Noneの場合は保存しない) |
|
|
|
|
|
Returns: |
|
|
LangChain形式のドキュメントメタデータ |
|
|
""" |
|
|
|
|
|
md_content = await scraping_pipeline.to_markdown_from_url(url) |
|
|
|
|
|
|
|
|
if save_dir: |
|
|
saved_path = io.save_markdown(md_content, save_dir, url) |
|
|
file_name = saved_path.name |
|
|
else: |
|
|
file_name = generate_file_name(url, index) |
|
|
|
|
|
|
|
|
document = { |
|
|
"metadata": { |
|
|
"title": extract_title(md_content), |
|
|
"file_name": file_name, |
|
|
"source_url": url, |
|
|
}, |
|
|
"page_content": md_content |
|
|
} |
|
|
|
|
|
return document |
|
|
|