aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/examples/basic_usage.py
blob: c327cb089e738764058b8d868242e9171df03635 (plain) (blame)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env python3
"""
基础使用示例
演示如何使用 ConventionalRP 解析和处理 TRPG 日志
"""

import sys
from pathlib import Path

# 添加 src 目录到 Python 路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root / "src"))

from conventionalrp.core.parser import Parser
from conventionalrp.core.processor import Processor
from conventionalrp.extractors.rule_extractor import RuleExtractor
from conventionalrp.renderers.html_renderer import HTMLRenderer
from conventionalrp.renderers.json_renderer import JSONRenderer
from conventionalrp.renderers.markdown_renderer import MarkdownRenderer


def main():
    # 获取示例文件路径
    example_dir = Path(__file__).parent
    rules_file = example_dir / "rules" / "dnd5e_rules.json5"
    log_file = example_dir / "logs" / "sample_session.txt"
    
    print("=" * 60)
    print("ConventionalRP 基础使用示例")
    print("=" * 60)
    
    # 步骤 1: 加载规则
    print("\n[步骤 1] 加载解析规则...")
    parser = Parser()
    parser.load_rules(str(rules_file))
    print(f"✓ 规则加载成功: {rules_file.name}")
    
    # 步骤 2: 解析日志
    print("\n[步骤 2] 解析 TRPG 日志...")
    parsed_data = parser.parse_log(str(log_file))
    print(f"✓ 日志解析完成,共 {len(parsed_data)} 条记录")
    
    # 步骤 3: 处理解析结果
    print("\n[步骤 3] 处理解析后的数据...")
    processor = Processor()
    processed_data = processor.process_tokens(parsed_data)
    print(f"✓ 数据处理完成")
    
    # 步骤 4: 渲染输出
    print("\n[步骤 4] 渲染输出...")
    
    # JSON 格式
    json_renderer = JSONRenderer()
    json_output = json_renderer.render(processed_data)
    json_file = example_dir / "output" / "session_output.json"
    json_file.parent.mkdir(exist_ok=True)
    with open(json_file, "w", encoding="utf-8") as f:
        f.write(json_output)
    print(f"✓ JSON 输出已保存: {json_file}")
    
    # HTML 格式
    html_renderer = HTMLRenderer()
    html_output = html_renderer.render(processed_data)
    html_file = example_dir / "output" / "session_output.html"
    with open(html_file, "w", encoding="utf-8") as f:
        f.write(html_output)
    print(f"✓ HTML 输出已保存: {html_file}")
    
    # Markdown 格式
    md_renderer = MarkdownRenderer()
    md_output = md_renderer.render(processed_data)
    md_file = example_dir / "output" / "session_output.md"
    with open(md_file, "w", encoding="utf-8") as f:
        f.write(md_output)
    print(f"✓ Markdown 输出已保存: {md_file}")
    
    # 预览前几条记录
    print("\n" + "=" * 60)
    print("解析结果预览(前3条):")
    print("=" * 60)
    for i, entry in enumerate(parsed_data[:3], 1):
        print(f"\n[记录 {i}]")
        print(f"  时间: {entry.get('timestamp', 'N/A')}")
        print(f"  发言者: {entry.get('speaker', 'N/A')}")
        print(f"  内容类型数: {len(entry.get('content', []))}")
        for content in entry.get('content', [])[:2]:  # 只显示前2个内容
            print(f"    - {content.get('type', 'unknown')}: {content.get('content', '')[:50]}...")
    
    print("\n" + "=" * 60)
    print("✓ 所有步骤完成!")
    print("=" * 60)


if __name__ == "__main__":
    main()