Skip to content

Intellectual Genealogy

Build a graph of how arguments relate—extensions, challenges, and syntheses across papers.


What is Intellectual Genealogy?

Intellectual genealogy maps how papers relate to each other beyond simple citations:

Relation Meaning
EXTENDS Builds directly on prior work
CHALLENGES Disputes or critiques findings
BUILDS_ON Uses as theoretical foundation
SYNTHESIZES Combines multiple perspectives

Building Genealogy

This makes LLM calls to infer relationships between papers. Results persist to the database.

# Build once; results are stored in intellectual_edges table
result = mapper.build_genealogy(verbose=True)

print(f"Analyzed: {result['analyzed']} papers")
print(f"Relationships found: {result['relationships']}")

Time Estimate

Approximately 20-30 seconds per paper. For a 50-paper corpus, expect ~25 minutes.


Finding Contradictions

Identify intellectual debates—papers that challenge each other:

import textwrap

debates = mapper.find_contradictions()

if not debates.empty:
    print("INTELLECTUAL DEBATES\n")

    for _, row in debates.head(3).iterrows():
        print(f"┌─ {row['paper_a'][:60]}")
        print(f"│     ↓ CHALLENGES")
        print(f"└─ {row['paper_b'][:60]}")
        print(f"\n   Confidence: {row['confidence']:.0%}")

        if row.get('evidence'):
            print(f"\n   Evidence:")
            for line in textwrap.wrap(row['evidence'], width=70):
                print(f"   {line}")
        print()

Argument Evolution

Trace how a concept's treatment evolved over time:

evolution = mapper.get_argument_evolution(concept="weak ties")

if not evolution.empty:
    for _, row in evolution.head(5).iterrows():
        print(f"{row['source_year']} {row['source_title'][:40]}...")
        print(f"    └─ {row['relation']}{row['target_title'][:40]}... ({row['target_year']})\n")

Example Output

1985 Economic Action and Social Structur...
    └─ BUILDS_ON → Social Resources and Strength of Ti... (1981)

2004 Structural Holes and Good Ideas...
    └─ EXTENDS → Social Resources and Strength of Ti... (1981)

Filtering by Concept

Find debates specifically about a concept:

# Find contradictions related to "homophily"
homophily_debates = mapper.find_contradictions(concept="homophily")

Use Cases

Goal Method
Find debates in the field find_contradictions()
Trace idea development get_argument_evolution(concept)
Map theoretical lineages Export genealogy edges to Gephi
Identify synthesis works Filter for SYNTHESIZES relations