# A first computational probe of Voynich meaning

15 October 2026

## Question

Can an algorithm find stable associations between the Voynich text and the kinds of pictures beside it, without pretending that EVA transliteration is a translation?

This is a first stage toward decipherment, not a decipherment. A semantic claim would need a repeatable mapping from manuscript signs to words or concepts that correctly predicts previously unseen passages and agrees with external evidence. This experiment tests a weaker prerequisite: whether text can predict illustrated section when some known text-style differences are held constant.

## Sources and method

- Manuscript images and section descriptions: [Yale's Beinecke Library, MS 408](https://beinecke.library.yale.edu/beinecke/collections/beinecke-cipher-voynich-manuscript).
- Text data: [VCAT line-level EVA data](https://huggingface.co/datasets/Ched-ai/voynich-eva), derived from the Zandbergen-Landini transcription. The exact input SHA-256 is recorded in `decipherment-probe-results.json`. The full transcription is not copied into this repository because [the scholarly transcription has no formal open license](https://github.com/noah-chelednik/voynich-data/blob/main/docs/SOURCES_LICENSE.md).
- Method: `decipherment-probe.py` extracts candidate EVA tokens from paragraph lines and trains a frequency model to distinguish two illustrated sections. It holds out entire folios when evaluating. A 100-run permutation test shuffles section labels at the folio level to estimate chance performance. Each comparison holds scribal hand and Currier text category constant. One also holds quire constant.
- Evaluation: balanced accuracy, the average of recall for the two classes. A score of 0.50 is chance for this measure. The permutation p-value is the share of shuffled runs that matched or exceeded the actual score, with a one-count correction.

Run with `python3 decipherment-probe.py --input /path/to/eva_lines.jsonl --output decipherment-probe-results.json --permutations 100` from this directory. The source data is available from the linked VCAT dataset. This script uses only Python's standard library.

## Results

| Controlled comparison | Pages | Held-out balanced accuracy | Null mean | Permutation p |
| --- | ---: | ---: | ---: | ---: |
| Hand 1, Currier A: herbal versus pharmaceutical | 95 + 16 | 0.8641 | 0.4982 | 0.0099 |
| Hand 2, Currier B: herbal versus biological | 20 + 19 | 0.9500 | 0.5290 | 0.0099 |
| Hand 1, Currier A, **same quire O**: herbal versus pharmaceutical | 6 + 6 | **0.5000** | 0.4625 | 0.7030 |

The first two comparisons show substantial text differences even after controlling for hand and Currier category. The stricter same-quire comparison does not separate herbal from pharmaceutical text. The first comparison's errors include herbal pages in quire O that look pharmaceutical to the model. This is a warning that the apparent success may partly track where and when the text was copied, rather than what the words mean. The biological pages are all in quire M in this dataset, so there is no same-quire biological comparison available.

In the hand 2 comparison, EVA token `qol` occurs 101 times on biological pages and zero times on the compared herbal pages, while `qokain` occurs 160 versus 2. These are **section-associated glyph sequences**, not identified words for bathing, women, water, reproduction, or anything else. The counts are exploratory and were selected using the same material on which they were measured.

## What this does and does not establish

The experiment establishes that an algorithm can detect differences in the transcribed text. It does **not** establish a language, a cipher key, or a translation. Because subject, quire and layout overlap, a section classifier can succeed without learning meaning. EVA labels are researcher-assigned labels for shapes, and the source transcriptions themselves contain disagreements. [Zandbergen's transliteration history](https://www.voynich.nu/transcr.html) describes those sources and conventions. [Bowern and Lindemann's linguistic review](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3778500) explains why statistical structure can be studied while content remains undeciphered.

The previous folio 2r exercise produced only a provisional visual transcription of one line. It supplies no plaintext anchor for the token sequences found here. That separate visual comparison is not included in this release because it quotes excerpts of third-party transcription work.

## Next falsifiable steps

1. Repeat the same analysis on an independently made EVA transcription and only keep markers stable across witnesses.
2. Control for quire and text position wherever sections overlap. Do not treat one-quire-only sections as independently verified semantic categories.
3. Pre-register a small set of candidate meanings tied to external medieval sources, such as plant names or zodiac labels. Require one mapping to predict unseen labeled pages and the surrounding prose, not just one appealing illustration.
4. Test cipher and abbreviation models against simulated fifteenth-century texts and against shuffled or generated Voynich-like controls. A model must succeed on its synthetic control before failure on Voynich tells us anything.
5. Publish the full mapping, predicted readings, errors and held-out tests. A single compelling sentence is insufficient.

No accepted decipherment emerged from this run. The result is a reusable experiment that narrows what can honestly be claimed from the text and images.
