← BACK

Bibliomorph

a Python library for building bibliographic data processing pipelines.
https://github.com/shaunabanana/bibliomorph

Update: Our review on care in HCI that this library supported has been presented at CHI 2026.

Intro

Bibliomorph is a Python library for building bibliographic data processing pipelines, to merge, enrich, and export citation data from multiple heterogeneous sources.

Currently, Bibliomorph can help with the following:

  • Load bibliographic data from multiple formats (Snowball, BibTeX, Excel (citation links))
  • Use string similarity matching to resolve textual mentions of papers (e.g. formatted citations) to structured paper records in a best-effort manner.
  • Enrich records with external metadata (OpenAlex)
  • Construct a unified citation graph
  • Export the result into a clean, analysis-ready JSON structure

For more, please see the readme on Github.

Behind the scenes

This library was born out of the code I wrote to support a literature review at the scale of 300+ included papers. And we wanted to have a visualization tool to help making sense of the many, many papers. Xinhuan took on the front-end part, and I worked on integrating the data into a file that can be easily loaded by the website and visualized. (This website is now a demo at NordiCHI'26. Come see us!)

It was a bit messy. The reading and coding was done in Atlas.ti, and exported into Excel spreadsheets. The paper metadata came from database searches (BibTeX files), and later was enriched with citation information using Snowball (another tool I wrote for literature reviews). Snowball exports JSON. The visualization library we used needed a different shape of JSON. There were errors discovered as the reading went on and needed to be changed and synced. Tags and labels may change and the files need updating too. Sometimes there were duplicates. Soon, there were 7 Jupyter notebooks each doing a small part. Running multiple notebooks each time a change needed to be made, I felt it was getting a bit out of hand.

The solution? I decided that we needed an end-to-end pipeline so that we can modify data in their respective original software, rerun the pipeline, and get an updated, integrated file. The overall process is one of loading, automatic merging (and warn about close but slightly different things), processing (such as enriching with OpenAlex data), and formatting. Each step I want to be able to plug in different modules as needed. And thus the library was born.

Next steps

I'm still in the process of adapting all of the custom code into generalizable modules. More modules will be added in the future.