# Neo4j Graph Database Import Guide This folder contains Neo4j-import-ready CSV files containing: * **Nodes**: Papers, Authors, and deduplicated Datasets. * **Relationships**: Authorship (`:AUTHORED`) and dataset citations (`:MENTIONS`). --- ## CSV File List 1. **`nodes_papers.csv`**: Contains Policy Research Working Papers. 2. **`nodes_datasets.csv`**: Contains canonicalized datasets. 3. **`nodes_authors.csv`**: Contains unique authors. 4. **`edges_authored.csv`**: Maps Authors to Papers. 5. **`edges_mentions.csv`**: Maps Papers to Datasets with page numbers, context, and model confidence scores. --- ## Import Cypher Queries To import these files into your Neo4j instance, place the CSV files in your Neo4j project's `import/` directory, open the Neo4j Browser, and execute the following queries: ### 1. Create Constraints ```cypher CREATE CONSTRAINT UNIQUE_paper FOR (p:Paper) REQUIRE p.id IS UNIQUE; CREATE CONSTRAINT UNIQUE_dataset FOR (d:Dataset) REQUIRE d.id IS UNIQUE; CREATE CONSTRAINT UNIQUE_author FOR (a:Author) REQUIRE a.id IS UNIQUE; ``` ### 2. Load Nodes ```cypher // Load Papers LOAD CSV WITH HEADERS FROM 'file:///nodes_papers.csv' AS row MERGE (p:Paper {id: row.id}) SET p.title = row.title, p.year = toInteger(row.year); // Load Datasets LOAD CSV WITH HEADERS FROM 'file:///nodes_datasets.csv' AS row MERGE (d:Dataset {id: row.id}) SET d.name = row.name, d.acronym = row.acronym, d.typology = row.typology, d.producer = row.producer, d.geography = row.geography; // Load Authors LOAD CSV WITH HEADERS FROM 'file:///nodes_authors.csv' AS row MERGE (a:Author {id: row.id}) SET a.name = row.name; ``` ### 3. Load Relationships ```cypher // Load AUTHORED LOAD CSV WITH HEADERS FROM 'file:///edges_authored.csv' AS row MATCH (a:Author {id: row.author_id}) MATCH (p:Paper {id: row.paper_id}) MERGE (a)-[:AUTHORED]->(p); // Load MENTIONS LOAD CSV WITH HEADERS FROM 'file:///edges_mentions.csv' AS row MATCH (p:Paper {id: row.paper_id}) MATCH (d:Dataset {id: row.dataset_id}) MERGE (p)-[:MENTIONS { pages: split(row.pages, ';'), context: row.context, confidence: toFloat(row.confidence) }]->(d); ```