A graph-based system for analyzing meeting relationships, participant interactions, and decision flows.
This utility imports SingularityNET meeting data into a Neo4j Aura graph database, creating a queryable graph structure of meetings, participants, documents, action items, and metadata.
Chek out our Wiki for detailed documentation and queries.
Figure 1: Graph model showing relationships between Meetings and related entities
- Meeting Data Import: Converts JSON meeting data into a graph structure
- Graph Relationships: Creates connections between meetings, people, documents, and tasks
- Environment Variable Configuration: Securely loads Neo4j credentials from
.env
- Error Handling: Comprehensive error logging for troubleshooting
Before diving into the analysis, ensure you have the following prerequisites installed and configured:
- Python 3.8 or later
- Neo4j Aura database instance
- Required Python packages:
pip install neo4j python-dotenv
-
Clone and Configure:
git clone <repository-url> cd <repository-directory>
-
Create
.env
File:NEO4J_URI=neo4j+s://<your-database-uri> NEO4J_USERNAME=neo4j NEO4J_PASSWORD=<your-password>
-
Prepare Meeting Data: Place your meeting data in
snet-data.json
following this structure:{ "meeting_id": [{ "workgroup": "Governance Workgroup", "meetingInfo": { "name": "Weekly", "date": "2025-01-07", "host": "Host Name", "documenter": "Documenter Name", "peoplePresent": "Person1, Person2, Person3", "purpose": "Meeting Purpose", "workingDocs": [ {"title": "Doc Title", "link": "Doc URL"} ] }, "agendaItems": [ { "status": "carry over", "narrative": "Discussion narrative...", "actionItems": [ { "text": "Action Description", "assignee": "Person Name", "dueDate": "2025-01-14", "status": "todo" } ], "decisionItems": [ { "decision": "Decision description", "rationale": "Reasoning behind decision", "opposing": "none", "effect": "affectsOnlyThisWorkgroup" } ], "discussionPoints": [ "Point 1", "Point 2" ] } ], "tags": { "topicsCovered": "Topic1, Topic2, Topic3", "emotions": "Productive, Collaborative" } }] }
Run the importer:
python neo.py
View all relationships:
MATCH (n)-[r]->(m)
RETURN n, r, m
Show meetings and participants:
MATCH (p:Person)-[:ATTENDED]->(m:Meeting)
RETURN m.workgroup, m.date, collect(p.name) as participants
View action items and assignees:
MATCH (m:Meeting)-[:HAS_ACTION]->(a:ActionItem)-[:ASSIGNED_TO]->(p:Person)
RETURN m.date, a.text, p.name, a.status, a.dueDate
View meeting structure:
MATCH (p:Person)-[:ATTENDED]->(m:Meeting)
RETURN m.workgroup, m.date, collect(p.name) as participants
View meeting agenda items and decisions:
MATCH (m:Meeting)-[:HAS_AGENDA_ITEM]->(a:AgendaItem)-[:MADE_DECISION]->(d:Decision)
RETURN m.date, a.status, d.decision, d.rationale
View meeting metadata:
MATCH (m:Meeting)-[:COVERS_TOPIC]->(t:Topic)
RETURN m.date, m.workgroup, collect(t.name) as topics
MATCH (m:Meeting)-[:HAS_EMOTION]->(e:Emotion)
RETURN m.date, m.workgroup, collect(e.name) as emotions
MATCH (m:Meeting)
OPTIONAL MATCH (m)-[:COVERS_TOPIC]->(t:Topic)
OPTIONAL MATCH (m)-[:HAS_EMOTION]->(e:Emotion)
RETURN m.date, m.workgroup,
collect(DISTINCT t.name) as topics,
collect(DISTINCT e.name) as emotions
neo.py
: Database connection and data import logicsnet-data.json
: Source meeting data.env
: Neo4j credentials (not tracked in git).gitignore
: Git ignore rules
- Ensure
.env
is in.gitignore
to protect credentials - Meeting data should follow the specified JSON structure
- Requires active Neo4j Aura instance
MIT License