This file provides guidance to WARP (warp.dev) when working with code in this repository.
Persona-based LinkedIn connection filtering system that identifies people with specific job titles at enterprise companies. Uses YAML configuration for easy customization of targeting criteria.
# Default usage with innovation_leaders persona
python main.py
# Custom input file
python main.py --input my_connections.csv
# Use different persona (if defined in config.yaml)
python main.py --persona fintech_leaders
# Custom configuration file
python main.py --config my_config.yaml
# Custom output directory
python main.py --output results/
# Debug mode for troubleshooting
python main.py --debug
# Quiet mode (minimal output)
python main.py --quiet# View all available options
python main.py --help- Pipeline: YAML config → CSV input → text normalization → persona-based matching → enterprise filtering → results + analysis
- Configuration:
LinkedInFilterclass loads persona-based targeting fromconfig.yaml - Innovation Detection:
is_innovation_role()- configurable keyword patterns by category, company token filtering, exclusion rules - Enterprise Matching:
is_enterprise_company()- configurable company lists by category (Brazilian, tech, consulting, financial) - Output: Persona-prefixed files with confidence scoring, seniority detection, and comprehensive analysis
- Active Persona: Set in
config.yamlviaactive_personafield - Keyword Categories: Organized by innovation type (core_innovation, digital_transformation, ventures_labs, strategy_tech)
- Language Support: Portuguese/Spanish terms and normalization rules
- Enterprise Companies: Categorized lists (brazilian, brazilian_tech, global_tech, consulting, financial, innovation_focused)
- Library: Built-in
csvmodule withDictReader - Encoding:
utf-8-sigfor BOM handling - Columns Used:
First Name,Last Name,Company,Position,URL,Email Address,Connected On - Special Handling: LinkedIn CSV header detection (
read_linkedin_csv()in enhanced/simple filters)
- Basic:
normalize_text()- lowercase, whitespace normalization - Advanced:
normalize_text()with Unicode NFD normalization, accent removal (innovation_enterprise_filter.py) - Company Names:
normalize_company_name()- suffix removal (Inc, LLC, etc.), punctuation cleanup
- Keywords: 4 categories - core_innovation, digital_transformation, ventures_labs, strategy_tech
- Portuguese/Spanish: Includes "transformação digital", "gerente"
- Company Token Filtering:
extract_company_tokens()removes company name from position to avoid false positives - Validation: Excludes false positives like "renovation"
- Source: Hardcoded lists + optional
enterprise_companies.csv - Aliases:
ENTERPRISE_ALIASESdict for name variations (e.g., "International Business Machines" → "IBM") - Fuzzy Matching: Jaccard similarity on word tokens (
jaccard_similarity()) - Thresholds: Default 0.85 fuzzy threshold, configurable via
--fuzzy-threshold
- File:
Connections.csvat repository root (or custom path via--input) - Format: LinkedIn connection export with UTF-8 BOM
- Required Columns: First Name, Last Name, Company, Position
- Configuration:
config.yamldefining personas, keywords, and enterprise companies
- Directory:
output/(auto-created, configurable via--output) - Files:
{persona_name}_filtered_connections.csv+{persona_name}_analysis_summary.json - CSV Columns: Original fields +
innovation_category,matched_keywords,enterprise_match,match_confidence,seniority_level - JSON Summary: Statistics, match rates, top companies, configuration used
- active_persona: Currently active targeting persona
- personas: Define multiple targeting strategies with keywords organized by category
- enterprise_companies: Categorized company lists (brazilian, global_tech, consulting, etc.)
- language_support: Text normalization and multi-language keyword support
- matching: Scoring weights, thresholds, and seniority detection rules
- output: File naming and column specifications
- validation: Exclusion patterns and quality filters
- Add new persona section under
personasinconfig.yaml - Define keyword categories relevant to your targeting
- Optionally customize enterprise company lists
- Run with
--persona your_persona_name
# Quick data overview and analysis
nu explore.nu
# Search for specific keywords in positions
nu explore.nu search "innovation"
# Deep dive into a specific company
nu explore.nu company "Microsoft"- Purpose: Fast data exploration and ad-hoc analysis
- Benefits: Interactive CSV analysis, quick statistics, company/keyword searches
- Complement: Use alongside Python main.py for different analysis perspectives
- Location: All original scripts moved to
_deprecated/directory - Purpose: Reference implementations and backup approaches
- Usage: Available for comparison or specific edge cases
- File Dependencies: All scripts expect
Connections.csvin repository root - Output Behavior: Scripts create
output/directory if it doesn't exist - Language Support: Enhanced and Enterprise filters include Portuguese/Spanish terms for Brazilian connections
- Deduplication: Only
innovation_enterprise_filter.pyincludes deduplication based on name/company/position - Performance: Enterprise filter supports fuzzy matching threshold tuning for precision/recall tradeoff
- Total Connections: 1,536 analyzed
- Innovation Roles: 29 identified (1.9% of connections)
- Enterprise Companies: 533 connections (34.7% of all connections)
- Final Matches: 13 people (0.8% of connections)
- Top Categories: Strategy & Tech (6), Core Innovation (4), Digital Transformation (3)