Extract ionizable-group information from pKa strings #14

Open
opened 2026-04-12 16:44:40 -04:00 by aalexmmaldonado · 0 comments
aalexmmaldonado commented 2026-04-12 16:44:40 -04:00 (Migrated from github.com)

An amino acid with a carboxyl group and an amino group has two pKa values. The parser extracts labels like "pKa1" and "pKa2", but those labels are ordinal; they don't say which functional group ionizes at that pKa. For site-specific pKa prediction (an ML application), the functional group is the thing you actually need.

Some PubChem entries carry this information in parenthetical comments: "pK1 = 2.36 (SRC: carboxylic acid)", "pKa = 10.4 at 40 °C (tertiary amine)". The data is there; we're just not capturing it.

Scope

Survey how functional-group information appears in real pKa strings across 10+ pages. Add an ionizable_group column (String, nullable) to the output schema. Parse (SRC: <group>) comments, trailing (<group>) comments like "(phenolic OH)", and leave null when no group information is present.

Don't standardize group names in this issue, just extract the raw text. Mapping free-text names to a classification scheme (or to atom indices via SMILES/InChI) is future work.

Definition of done

ionizable_group populated when the source string contains group information. Tests covering the common formats.

An amino acid with a carboxyl group and an amino group has two pKa values. The parser extracts labels like `"pKa1"` and `"pKa2"`, but those labels are ordinal; they don't say which functional group ionizes at that pKa. For site-specific pKa prediction (an ML application), the functional group is the thing you actually need. Some PubChem entries carry this information in parenthetical comments: `"pK1 = 2.36 (SRC: carboxylic acid)"`, `"pKa = 10.4 at 40 °C (tertiary amine)"`. The data is there; we're just not capturing it. ### Scope Survey how functional-group information appears in real pKa strings across 10+ pages. Add an `ionizable_group` column (String, nullable) to the output schema. Parse `(SRC: <group>)` comments, trailing `(<group>)` comments like `"(phenolic OH)"`, and leave null when no group information is present. Don't standardize group names in this issue, just extract the raw text. Mapping free-text names to a classification scheme (or to atom indices via SMILES/InChI) is future work. ### Definition of done `ionizable_group` populated when the source string contains group information. Tests covering the common formats.
Sign in to join this conversation.