更新文档系统归并优化方案

This commit is contained in:
ben
2025-10-29 14:36:13 +00:00
parent 2f96497530
commit 0def756314
332 changed files with 30606 additions and 28342 deletions

View File

@@ -0,0 +1,493 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
符号传承分析系统
胡汉三千年项目核心分析工具
功能:实现符号的溯源分析、形义关联、跨文明对比等功能
"""
import json
import sqlite3
from typing import Dict, List, Optional, Tuple
from dataclasses import dataclass
from enum import Enum
class YinYangAttribute(Enum):
"""阴阳属性枚举"""
YIN = "yin" # 阴
YANG = "yang" # 阳
NEUTRAL = "neutral" # 中性
class EngravingType(Enum):
"""刻法类型枚举"""
YIN_ENGRAVING = "yin_engraving" # 阴刻
YANG_ENGRAVING = "yang_engraving" # 阳刻
MIXED = "mixed" # 混合
class LinkType(Enum):
"""关联类型枚举"""
DIRECT_EVOLUTION = "direct_evolution" # 直接演化
FUNCTIONAL_PARALLEL = "functional_parallel" # 功能平行
STRUCTURAL_SIMILARITY = "structural_similarity" # 结构相似
PHONETIC_CORRESPONDENCE = "phonetic_correspondence" # 语音对应
@dataclass
class Symbol:
"""符号数据类"""
symbol_id: str
symbol_form: str
symbol_name: str
yin_yang_attribute: YinYangAttribute
engraving_type: EngravingType
origin_civilization: str
origin_period: str
description: str
@dataclass
class SymbolAttribute:
"""符号属性数据类"""
attribute_type: str
attribute_name: str
attribute_value: str
evidence_source: str
confidence_level: str
@dataclass
class CrossCivilizationLink:
"""跨文明关联数据类"""
source_symbol_id: str
target_symbol_id: str
link_type: LinkType
link_strength: str
transmission_path: str
historical_evidence: str
class SymbolAnalysisSystem:
"""符号分析系统主类"""
def __init__(self, db_path: str = "symbols.db"):
"""初始化分析系统"""
self.db_path = db_path
self.conn = None
self._init_database()
def _init_database(self):
"""初始化数据库"""
self.conn = sqlite3.connect(self.db_path)
self._create_tables()
self._load_sample_data()
def _create_tables(self):
"""创建数据库表"""
cursor = self.conn.cursor()
# 创建符号主表
cursor.execute("""
CREATE TABLE IF NOT EXISTS symbols (
symbol_id TEXT PRIMARY KEY,
symbol_form TEXT NOT NULL,
symbol_name TEXT,
yin_yang_attribute TEXT,
engraving_type TEXT,
origin_civilization TEXT,
origin_period TEXT,
description TEXT
)
""")
# 创建符号属性表
cursor.execute("""
CREATE TABLE IF NOT EXISTS symbol_attributes (
attribute_id INTEGER PRIMARY KEY AUTOINCREMENT,
symbol_id TEXT,
attribute_type TEXT,
attribute_name TEXT,
attribute_value TEXT,
evidence_source TEXT,
confidence_level TEXT,
FOREIGN KEY (symbol_id) REFERENCES symbols(symbol_id)
)
""")
# 创建跨文明关联表
cursor.execute("""
CREATE TABLE IF NOT EXISTS cross_civilization_links (
link_id INTEGER PRIMARY KEY AUTOINCREMENT,
source_symbol_id TEXT,
target_symbol_id TEXT,
link_type TEXT,
link_strength TEXT,
transmission_path TEXT,
historical_evidence TEXT,
FOREIGN KEY (source_symbol_id) REFERENCES symbols(symbol_id),
FOREIGN KEY (target_symbol_id) REFERENCES symbols(symbol_id)
)
""")
self.conn.commit()
def _load_sample_data(self):
"""加载示例数据"""
# 检查是否已有数据
cursor = self.conn.cursor()
cursor.execute("SELECT COUNT(*) FROM symbols")
if cursor.fetchone()[0] > 0:
return
# 加载核心符号数据
self._load_core_symbols()
def _load_core_symbols(self):
"""加载核心符号数据"""
cursor = self.conn.cursor()
# P类符号阴刻
p_symbols = [
("P_yin_001", "P", "拉丁字母P", "yin", "yin_engraving", "Greek", "8th century BCE",
"阴刻符号,象征凹陷、容纳的阴性特质"),
("Pi_yin_001", "Π", "希腊字母Pi", "yin", "yin_engraving", "Greek", "8th century BCE",
"阴刻符号,两竖一横形成凹槽结构"),
("Fu_gua_yin", "", "周易否卦", "yin", "yin_engraving", "Chinese", "Zhou Dynasty",
"天地否卦,上乾下坤,象征阴盛阳衰的凹陷状态")
]
# T类符号阳刻
t_symbols = [
("T_yang_001", "T", "拉丁字母T", "yang", "yang_engraving", "Greek", "8th century BCE",
"阳刻符号,象征凸起、支撑的阳性特质"),
("Tau_yang_001", "Τ", "希腊字母Tau", "yang", "yang_engraving", "Greek", "8th century BCE",
"阳刻符号,一横一竖形成立柱结构"),
("Tai_gua_yang", "", "周易泰卦", "yang", "yang_engraving", "Chinese", "Zhou Dynasty",
"地天泰卦,上坤下乾,象征阳盛阴衰的凸起状态")
]
# 插入符号数据
cursor.executemany("""
INSERT OR IGNORE INTO symbols VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", p_symbols + t_symbols)
# 插入关联数据
links = [
("Fu_gua_yin", "Pi_yin_001", "functional_parallel", "strong",
"周易→希腊文明交流", "阴阳观的功能对应"),
("Pi_yin_001", "P_yin_001", "direct_evolution", "strong",
"希腊字母→拉丁字母演化", "字母形态的直接继承"),
("Tai_gua_yang", "Tau_yang_001", "functional_parallel", "strong",
"周易→希腊文明交流", "阴阳观的功能对应"),
("Tau_yang_001", "T_yang_001", "direct_evolution", "strong",
"希腊字母→拉丁字母演化", "字母形态的直接继承")
]
cursor.executemany("""
INSERT OR IGNORE INTO cross_civilization_links
(source_symbol_id, target_symbol_id, link_type, link_strength, transmission_path, historical_evidence)
VALUES (?, ?, ?, ?, ?, ?)
""", links)
self.conn.commit()
def trace_symbol_origin(self, symbol_id: str) -> List[Tuple[str, str, str]]:
"""
追踪符号的起源和传播路径
Args:
symbol_id: 符号ID
Returns:
List of (symbol_id, civilization, period) tuples representing the transmission path
"""
cursor = self.conn.cursor()
# 使用递归查询追踪传播路径
query = """
WITH RECURSIVE symbol_path AS (
SELECT s.symbol_id, s.origin_civilization, s.origin_period, 0 as depth
FROM symbols s
WHERE s.symbol_id = ?
UNION ALL
SELECT s.symbol_id, s.origin_civilization, s.origin_period, sp.depth + 1
FROM symbols s
JOIN cross_civilization_links l ON s.symbol_id = l.target_symbol_id
JOIN symbol_path sp ON l.source_symbol_id = sp.symbol_id
WHERE sp.depth < 10 -- 防止无限递归
)
SELECT symbol_id, origin_civilization, origin_period
FROM symbol_path
ORDER BY depth DESC
"""
cursor.execute(query, (symbol_id,))
return cursor.fetchall()
def analyze_yin_yang_correspondence(self, symbol_id: str) -> Dict:
"""
分析符号的阴阳对应关系
Args:
symbol_id: 符号ID
Returns:
包含阴阳分析结果的字典
"""
cursor = self.conn.cursor()
# 获取符号基本信息
cursor.execute("""
SELECT symbol_form, symbol_name, yin_yang_attribute, engraving_type, description
FROM symbols
WHERE symbol_id = ?
""", (symbol_id,))
result = cursor.fetchone()
if not result:
return {"error": "Symbol not found"}
symbol_form, symbol_name, yin_yang, engraving_type, description = result
# 分析阴阳属性
analysis = {
"symbol_id": symbol_id,
"symbol_form": symbol_form,
"symbol_name": symbol_name,
"yin_yang_attribute": yin_yang,
"engraving_type": engraving_type,
"description": description,
"opposite_symbols": [],
"similar_symbols": [],
"geographical_correspondences": []
}
# 寻找对立符号
opposite_yin_yang = "yang" if yin_yang == "yin" else "yin"
cursor.execute("""
SELECT symbol_id, symbol_form, symbol_name
FROM symbols
WHERE yin_yang_attribute = ?
LIMIT 5
""", (opposite_yin_yang,))
analysis["opposite_symbols"] = [
{"symbol_id": row[0], "form": row[1], "name": row[2]}
for row in cursor.fetchall()
]
# 寻找相似符号
cursor.execute("""
SELECT symbol_id, symbol_form, symbol_name
FROM symbols
WHERE yin_yang_attribute = ? AND symbol_id != ?
LIMIT 5
""", (yin_yang, symbol_id))
analysis["similar_symbols"] = [
{"symbol_id": row[0], "form": row[1], "name": row[2]}
for row in cursor.fetchall()
]
return analysis
def find_cross_civilization_parallels(self, symbol_id: str) -> List[Dict]:
"""
寻找跨文明的平行符号
Args:
symbol_id: 符号ID
Returns:
平行符号列表
"""
cursor = self.conn.cursor()
# 获取当前符号的属性
cursor.execute("""
SELECT yin_yang_attribute, engraving_type
FROM symbols
WHERE symbol_id = ?
""", (symbol_id,))
result = cursor.fetchone()
if not result:
return []
yin_yang, engraving_type = result
# 寻找具有相同阴阳属性和刻法类型的符号
cursor.execute("""
SELECT s.symbol_id, s.symbol_form, s.symbol_name, s.origin_civilization, s.origin_period
FROM symbols s
WHERE s.yin_yang_attribute = ? AND s.engraving_type = ? AND s.symbol_id != ?
ORDER BY s.origin_period
""", (yin_yang, engraving_type, symbol_id))
parallels = []
for row in cursor.fetchall():
parallels.append({
"symbol_id": row[0],
"form": row[1],
"name": row[2],
"civilization": row[3],
"period": row[4]
})
return parallels
def create_symbol_family_tree(self, base_symbol_id: str) -> Dict:
"""
创建符号家族树
Args:
base_symbol_id: 基础符号ID
Returns:
符号家族树结构
"""
cursor = self.conn.cursor()
# 获取基础符号信息
cursor.execute("""
SELECT symbol_form, symbol_name, origin_civilization, origin_period
FROM symbols
WHERE symbol_id = ?
""", (base_symbol_id,))
base_info = cursor.fetchone()
if not base_info:
return {"error": "Base symbol not found"}
family_tree = {
"base_symbol": {
"id": base_symbol_id,
"form": base_info[0],
"name": base_info[1],
"civilization": base_info[2],
"period": base_info[3]
},
"ancestors": [],
"descendants": [],
"parallels": []
}
# 寻找祖先符号(来源)
cursor.execute("""
SELECT s.symbol_id, s.symbol_form, s.symbol_name, s.origin_civilization, s.origin_period
FROM symbols s
JOIN cross_civilization_links l ON s.symbol_id = l.source_symbol_id
WHERE l.target_symbol_id = ? AND l.link_type = 'direct_evolution'
""", (base_symbol_id,))
for row in cursor.fetchall():
family_tree["ancestors"].append({
"id": row[0], "form": row[1], "name": row[2],
"civilization": row[3], "period": row[4]
})
# 寻找后代符号(演化)
cursor.execute("""
SELECT s.symbol_id, s.symbol_form, s.symbol_name, s.origin_civilization, s.origin_period
FROM symbols s
JOIN cross_civilization_links l ON s.symbol_id = l.target_symbol_id
WHERE l.source_symbol_id = ? AND l.link_type = 'direct_evolution'
""", (base_symbol_id,))
for row in cursor.fetchall():
family_tree["descendants"].append({
"id": row[0], "form": row[1], "name": row[2],
"civilization": row[3], "period": row[4]
})
# 寻找平行符号
family_tree["parallels"] = self.find_cross_civilization_parallels(base_symbol_id)
return family_tree
def export_analysis_report(self, symbol_id: str, output_format: str = "json") -> str:
"""
导出符号分析报告
Args:
symbol_id: 符号ID
output_format: 输出格式json/markdown
Returns:
分析报告内容
"""
# 获取各种分析结果
origin_path = self.trace_symbol_origin(symbol_id)
yin_yang_analysis = self.analyze_yin_yang_correspondence(symbol_id)
family_tree = self.create_symbol_family_tree(symbol_id)
# 符号基本信息
cursor = self.conn.cursor()
cursor.execute("SELECT * FROM symbols WHERE symbol_id = ?", (symbol_id,))
symbol_info = cursor.fetchone()
if output_format == "json":
report = {
"symbol_info": dict(zip([col[0] for col in cursor.description], symbol_info)),
"origin_path": origin_path,
"yin_yang_analysis": yin_yang_analysis,
"family_tree": family_tree
}
return json.dumps(report, ensure_ascii=False, indent=2)
elif output_format == "markdown":
markdown_report = f"""# 符号分析报告:{symbol_id}
## 符号基本信息
- **符号形态**: {symbol_info[1]}
- **符号名称**: {symbol_info[2]}
- **阴阳属性**: {symbol_info[3]}
- **刻法类型**: {symbol_info[4]}
- **起源文明**: {symbol_info[5]}
- **起源时期**: {symbol_info[6]}
- **描述**: {symbol_info[7]}
## 起源传播路径
"""
for i, (sym_id, civ, period) in enumerate(origin_path):
markdown_report += f"{i+1}. {sym_id} ({civ}, {period})\n"
markdown_report += f"""
## 阴阳对应分析
- **对立符号**: {len(yin_yang_analysis.get('opposite_symbols', []))}
- **相似符号**: {len(yin_yang_analysis.get('similar_symbols', []))}
## 符号家族树
- **祖先符号**: {len(family_tree.get('ancestors', []))}
- **后代符号**: {len(family_tree.get('descendants', []))}
- **平行符号**: {len(family_tree.get('parallels', []))}
"""
return markdown_report
else:
return "Unsupported output format"
# 使用示例
def main():
"""主函数示例"""
# 创建分析系统
analyzer = SymbolAnalysisSystem()
# 分析P符号
print("=== P符号分析 ===")
p_analysis = analyzer.analyze_yin_yang_correspondence("P_yin_001")
print(json.dumps(p_analysis, ensure_ascii=False, indent=2))
# 追踪P符号起源
print("\n=== P符号起源追踪 ===")
p_origin = analyzer.trace_symbol_origin("P_yin_001")
for sym_id, civ, period in p_origin:
print(f"{sym_id}: {civ} ({period})")
# 导出分析报告
print("\n=== P符号分析报告 ===")
report = analyzer.export_analysis_report("P_yin_001", "markdown")
print(report)
if __name__ == "__main__":
main()