generate_report.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import json
  2. import os
  3. def generate_markdown_report():
  4. """生成Markdown格式的分析报告"""
  5. # 读取分析结果
  6. with open('analysis_results.json', 'r', encoding='utf-8') as f:
  7. results = json.load(f)
  8. # 读取完整数据
  9. with open('samples_data.json', 'r', encoding='utf-8') as f:
  10. full_data = json.load(f)
  11. # 开始生成报告
  12. report = []
  13. report.append("# 样本文件分析报告\n")
  14. report.append(f"**分析时间**: 2024\n")
  15. report.append(f"**文件总数**: {len(results)}\n")
  16. report.append("\n---\n")
  17. # 统计信息
  18. report.append("\n## 📊 文件类型统计\n")
  19. type_count = {}
  20. for item in results:
  21. file_type = item['type']
  22. type_count[file_type] = type_count.get(file_type, 0) + 1
  23. for file_type, count in type_count.items():
  24. report.append(f"- **{file_type}**: {count} 个\n")
  25. report.append("\n---\n")
  26. # 详细分析
  27. report.append("\n## 📝 文件详细分析\n")
  28. for idx, item in enumerate(results, 1):
  29. filename = item['filename']
  30. file_type = item['type']
  31. report.append(f"\n### {idx}. {filename}\n")
  32. report.append(f"\n**文件类型**: {file_type}\n")
  33. # 获取完整文件信息
  34. file_info = full_data.get(filename, {})
  35. if 'format' in file_info:
  36. report.append(f"**文件格式**: {file_info['format']}\n")
  37. if 'encoding' in file_info:
  38. report.append(f"**文件编码**: {file_info['encoding']}\n")
  39. if 'length' in file_info:
  40. report.append(f"**文件长度**: {file_info['length']:,} 字符\n")
  41. # 根据类型添加特定信息
  42. if file_type == '网络小说':
  43. if 'author' in item:
  44. report.append(f"**作者**: {item['author']}\n")
  45. if 'intro' in item:
  46. report.append(f"\n**内容简介**:\n```\n{item['intro']}\n```\n")
  47. if 'chapters_preview' in item and item['chapters_preview']:
  48. report.append(f"\n**章节预览**:\n")
  49. for chapter in item['chapters_preview'][:5]:
  50. report.append(f"- {chapter}\n")
  51. elif '剧本' in file_type:
  52. if 'scenes' in item and item['scenes'] > 0:
  53. report.append(f"**场景数量**: {item['scenes']} 个(前10000字统计)\n")
  54. if 'characters' in item and item['characters']:
  55. report.append(f"\n**主要人物**:\n")
  56. for char in item['characters'][:10]:
  57. report.append(f"- {char}\n")
  58. report.append(f"\n**结构特征**: {item['structure_notes']}\n")
  59. # 添加前3000字预览
  60. report.append(f"\n**前3000字内容预览**:\n")
  61. report.append("```\n")
  62. preview = item['first_3000'][:3000]
  63. report.append(preview)
  64. report.append("\n```\n")
  65. report.append("\n---\n")
  66. # 总结
  67. report.append("\n## 📌 分析总结\n")
  68. report.append("\n### 网络小说特征\n")
  69. report.append("- 采用章节式结构,通常有\"第X章\"标记\n")
  70. report.append("- 包含作者信息和内容简介\n")
  71. report.append("- 文件通常较大(几十万到几百万字符)\n")
  72. report.append("- 常见编码:GBK、GB18030\n")
  73. report.append("\n### 剧本特征\n")
  74. report.append("- 采用场景编号格式(如\"1-1\"、\"2-1\")\n")
  75. report.append("- 包含人物列表、对话和动作描述\n")
  76. report.append("- 使用特殊符号标记(如▲表示动作)\n")
  77. report.append("- 包含场景时间地点标注(日/夜、内/外)\n")
  78. report.append("\n### 编码处理经验\n")
  79. report.append("- TXT文件主要使用GBK和GB18030编码\n")
  80. report.append("- 需要尝试多种编码方式进行读取\n")
  81. report.append("- PDF和DOCX文件可以直接使用相应库读取\n")
  82. return ''.join(report)
  83. def main():
  84. # 生成报告
  85. report = generate_markdown_report()
  86. # 确保目录存在
  87. os.makedirs('knowledge', exist_ok=True)
  88. # 保存报告
  89. output_path = 'knowledge/samples_overview.md'
  90. with open(output_path, 'w', encoding='utf-8') as f:
  91. f.write(report)
  92. print(f"报告已生成: {output_path}")
  93. print(f"报告长度: {len(report)} 字符")
  94. if __name__ == '__main__':
  95. main()