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()
|