File size: 1,747 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
"""単一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)
        
        # save_dirが指定されている場合はファイル保存
        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)
        
        # メタデータ生成(LangChain形式)
        document = {
            "metadata": {
                "title": extract_title(md_content),
                "file_name": file_name,
                "source_url": url,
            },
            "page_content": md_content
        }
        
        return document