-
Database Setup (requires admin access):
# Run as gregb psql -f database/grant_permissions.sqlThis will:
- Grant SELECT permission on
public.raw_text_datatolanguageingeneticsuser - Create a GIN index for efficient journal filtering (takes a long time on large tables)
- Grant SELECT permission on
-
Environment Variables:
export PGDATABASE=crossref # Other PostgreSQL env vars (PGHOST, PGUSER, etc.) as needed
cd extractor/
# Submit a batch of articles for processing
./bulkquery.py --limit 1000
# Check batch status
./batchcheck.py
# Fetch completed results
./batchfetch.py --report-costs
# Generate dashboard
./generate_dashboard.py --output-dir ../dashboardThe cronscript.sh handles the full workflow:
# Run manually
./cronscript.sh
# Or schedule with cron (every 6 hours)
0 */6 * * * /home/languageingenetics/Word-Frequency-Analysis-/cronscript.sh# List all journals
psql -c "SELECT name, enabled FROM languageingenetics.journals ORDER BY name;"
# Disable a journal
psql -c "UPDATE languageingenetics.journals SET enabled = false WHERE name = 'Heredity';"
# Add a new journal
psql -c "INSERT INTO languageingenetics.journals (name) VALUES ('New Journal Name');"- public.raw_text_data: Contains all CrossRef articles (JSON text in
filesrccolumn) - languageingenetics.journals: Manages which journals to process
- languageingenetics.files: Stores OpenAI analysis results
- languageingenetics.batches: Tracks batch processing jobs
- The
raw_text_datatable is hundreds of GB - the GIN index is critical for performance - All scripts use environment variables for database connection (no
--pg-connparameter) - The
languageingeneticsuser needs SELECT permission onpublic.raw_text_data - See
CLAUDE.mdfor detailed documentation