196 lines
7.7 KiB
Python
196 lines
7.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Neo4j 数据库设置和"圐圙"词根网络构建
|
|
"""
|
|
|
|
from neo4j import GraphDatabase
|
|
import json
|
|
|
|
class KulueNetworkBuilder:
|
|
def __init__(self, uri="bolt://localhost:7687", user="neo4j", password="password"):
|
|
self.driver = GraphDatabase.driver(uri, auth=(user, password))
|
|
|
|
def close(self):
|
|
self.driver.close()
|
|
|
|
def clear_database(self):
|
|
"""清空数据库"""
|
|
with self.driver.session() as session:
|
|
session.run("MATCH (n) DETACH DELETE n")
|
|
|
|
def create_kulue_network(self):
|
|
"""创建圐圙词根网络"""
|
|
|
|
# 核心词汇数据
|
|
kulue_words = [
|
|
# 地理概念
|
|
{"name": "昆仑", "category": "地理", "meaning": "神山", "region": "西域", "dynasty": "先秦"},
|
|
{"name": "祁连", "category": "地理", "meaning": "天山", "region": "河西", "dynasty": "汉"},
|
|
{"name": "轩辕", "category": "地理", "meaning": "黄帝丘", "region": "中原", "dynasty": "上古"},
|
|
{"name": "贺兰", "category": "地理", "meaning": "天山", "region": "河套", "dynasty": "唐"},
|
|
|
|
# 器物概念
|
|
{"name": "轱辘", "category": "器物", "meaning": "车轮", "region": "中原", "dynasty": "春秋"},
|
|
{"name": "辘轳", "category": "器物", "meaning": "井具", "region": "西域", "dynasty": "汉"},
|
|
{"name": "囫囵", "category": "器物", "meaning": "完整", "region": "中原", "dynasty": "宋"},
|
|
|
|
# 政治概念
|
|
{"name": "库伦", "category": "政治", "meaning": "都城", "region": "蒙古", "dynasty": "元"},
|
|
{"name": "固伦", "category": "政治", "meaning": "公主", "region": "满洲", "dynasty": "清"},
|
|
{"name": "克烈", "category": "政治", "meaning": "部落", "region": "蒙古", "dynasty": "元"},
|
|
|
|
# 文化概念
|
|
{"name": "崆峒", "category": "文化", "meaning": "仙山", "region": "陇右", "dynasty": "唐"},
|
|
{"name": "洪洞", "category": "文化", "meaning": "移民", "region": "晋南", "dynasty": "明"},
|
|
{"name": "窟窿", "category": "文化", "meaning": "石窟", "region": "西域", "dynasty": "北魏"},
|
|
|
|
# 核心概念
|
|
{"name": "圐圙", "category": "核心", "meaning": "天下", "region": "蒙古", "dynasty": "元"},
|
|
{"name": "忽里勒台", "category": "核心", "meaning": "大会", "region": "蒙古", "dynasty": "元"},
|
|
]
|
|
|
|
# 创建词汇节点
|
|
with self.driver.session() as session:
|
|
for word in kulue_words:
|
|
session.run("""
|
|
CREATE (w:Word {
|
|
name: $name,
|
|
category: $category,
|
|
meaning: $meaning,
|
|
region: $region,
|
|
dynasty: $dynasty
|
|
})
|
|
""", **word)
|
|
|
|
# 创建音转关系
|
|
sound_relations = [
|
|
("昆仑", "库伦", "音转"),
|
|
("昆仑", "固伦", "音转"),
|
|
("昆仑", "克烈", "音转"),
|
|
("昆仑", "崆峒", "音转"),
|
|
("昆仑", "洪洞", "音转"),
|
|
("昆仑", "圐圙", "音转"),
|
|
("轱辘", "辘轳", "音转"),
|
|
("轱辘", "囫囵", "音转"),
|
|
("圐圙", "忽里勒台", "音转"),
|
|
]
|
|
|
|
with self.driver.session() as session:
|
|
for source, target, relation in sound_relations:
|
|
session.run("""
|
|
MATCH (s:Word {name: $source})
|
|
MATCH (t:Word {name: $target})
|
|
CREATE (s)-[:SOUND_SHIFT {type: $relation}]->(t)
|
|
""", source=source, target=target, relation=relation)
|
|
|
|
# 创建语义关系
|
|
semantic_relations = [
|
|
("昆仑", "祁连", "同义"),
|
|
("昆仑", "轩辕", "同义"),
|
|
("昆仑", "贺兰", "同义"),
|
|
("轱辘", "辘轳", "功能相关"),
|
|
("库伦", "固伦", "政治相关"),
|
|
]
|
|
|
|
with self.driver.session() as session:
|
|
for source, target, relation in semantic_relations:
|
|
session.run("""
|
|
MATCH (s:Word {name: $source})
|
|
MATCH (t:Word {name: $target})
|
|
CREATE (s)-[:SEMANTIC {type: $relation}]->(t)
|
|
""", source=source, target=target, relation=relation)
|
|
|
|
def create_historical_context(self):
|
|
"""创建历史背景节点"""
|
|
|
|
dynasties = [
|
|
{"name": "先秦", "period": "公元前2070-前221", "empire": "长城"},
|
|
{"name": "秦汉", "period": "公元前221-220", "empire": "长城"},
|
|
{"name": "隋唐", "period": "581-907", "empire": "运河"},
|
|
{"name": "宋元", "period": "960-1368", "empire": "圐圙"},
|
|
{"name": "明清", "period": "1368-1912", "empire": "圐圙"},
|
|
]
|
|
|
|
with self.driver.session() as session:
|
|
for dynasty in dynasties:
|
|
session.run("""
|
|
CREATE (d:Dynasty {
|
|
name: $name,
|
|
period: $period,
|
|
empire: $empire
|
|
})
|
|
""", **dynasty)
|
|
|
|
# 创建三个帝国节点
|
|
empires = [
|
|
{"name": "长城帝国", "symbol": "长城", "meaning": "华夏大防"},
|
|
{"name": "运河帝国", "symbol": "运河", "meaning": "南北统一"},
|
|
{"name": "圐圙帝国", "symbol": "圐圙", "meaning": "天下一家"},
|
|
]
|
|
|
|
with self.driver.session() as session:
|
|
for empire in empires:
|
|
session.run("""
|
|
CREATE (e:Empire {
|
|
name: $name,
|
|
symbol: $symbol,
|
|
meaning: $meaning
|
|
})
|
|
""", **empire)
|
|
|
|
def query_kulue_network(self):
|
|
"""查询圐圙网络的示例"""
|
|
|
|
queries = {
|
|
"找到所有与'昆仑'相关的词汇": """
|
|
MATCH (k:Word {name: '昆仑'})-[r]-(related:Word)
|
|
RETURN k.name, type(r), related.name, related.meaning
|
|
""",
|
|
|
|
"查找音转路径": """
|
|
MATCH path = (start:Word)-[:SOUND_SHIFT*1..3]-(end:Word)
|
|
WHERE start.name = '昆仑'
|
|
RETURN path
|
|
""",
|
|
|
|
"按类别统计词汇": """
|
|
MATCH (w:Word)
|
|
RETURN w.category, count(w) as count
|
|
ORDER BY count DESC
|
|
""",
|
|
|
|
"查找核心概念的关联": """
|
|
MATCH (core:Word {category: '核心'})-[r]-(related:Word)
|
|
RETURN core.name, type(r), related.name, related.category
|
|
"""
|
|
}
|
|
|
|
with self.driver.session() as session:
|
|
for description, query in queries.items():
|
|
print(f"\n=== {description} ===")
|
|
result = session.run(query)
|
|
for record in result:
|
|
print(record)
|
|
|
|
def main():
|
|
# 创建数据库连接
|
|
builder = KulueNetworkBuilder()
|
|
|
|
try:
|
|
print("清空数据库...")
|
|
builder.clear_database()
|
|
|
|
print("创建圐圙词根网络...")
|
|
builder.create_kulue_network()
|
|
|
|
print("创建历史背景...")
|
|
builder.create_historical_context()
|
|
|
|
print("查询示例...")
|
|
builder.query_kulue_network()
|
|
|
|
finally:
|
|
builder.close()
|
|
|
|
if __name__ == "__main__":
|
|
main() |