Archive for the ‘f1r’ Category

Using t-distributed Stochastic Neighbor Embedding (TSNE) to cluster folios

September 26, 2017 23 comments

For this attack we’ll use the Takeshi EVA transcription to count the number of times each glyph appears on each folio. This gives us a vector of probabilities for each glyph, for each folio – the vectors are 24 long, as there are 24 EVA glyphs in the alphabet.

For example, here is the probability vector for f1r:

1r 28 lines {‘a’: 0.08917835671342686, ‘c’: 0.08216432865731463, ‘e’: 0.05110220440881764, ‘d’: 0.06212424849699399, ‘f’: 0.00501002004008016, ‘i’: 0.08617234468937876, ‘h’: 0.12324649298597194, ‘k’: 0.045090180360721446, ‘*’: 0.012024048096192385, ‘m’: 0.001002004008016032, ‘l’: 0.03507014028056112, ‘o’: 0.11923847695390781, ‘n’: 0.050100200400801605, ‘p’: 0.012024048096192385, ‘s’: 0.06412825651302605, ‘r’: 0.04408817635270541, ‘t’: 0.03907815631262525, ‘y’: 0.07915831663326653}

(This reads as glyph “a” appears 8.9% of the time on f1r, glyph “c” 8.2% of the time, and so on.)

The question is: how similar are these frequency distributions amongst all the folios? Using tSNE (implemented in Scikit learn here: we can try to find a 3D arrangement of all the folios that minimises the glyph frequency vector difference between nearby folios.

Here’s a typical result: each folio appears as a point in 3D space …

The colour coding is: red dots are folios that Currier identified as “Language A”, blue are “Language B”, and the remaining black dots do not have an assignment.

It’s clear that the red and blue are well separated, reinforcing Currier’s assignments. Thus this is independent support of Currier’s theory.

There are a couple of notable features:

  • f57r and f57v are labelled as Language A (red) – but it looks like they should be labelled as Language B (blue)
  • The unassigned folios (black dots) look like they are all Language B

Runkelstein Castle and the Voynich Manuscript

June 10, 2011 Leave a comment

Runkelstein Castle

Runkelstein Castle , in the South Tyrol, dates from the 13th. century and contains a set of mural paintings / frescoes that contain some features that are reminiscent of some images in the Voynich Manuscript. See this link for a collection of photos from the Castle. (Images in this post are copies from there and from

History of the Castle

In summary, it was built by the Lords of Wangen in 1237, then taken over by Count Meinhard II of Tyrol in 1277, then bought by the Vintlers in 1385, one of whom was the counsellor and financier of the Count of  Tyrol, Duke Leopold III of Austria. The Vintlers commissioned the frescos.  Then in 1407 it was besieged. It was bought sometime later by Archduke  Sigmund, who allowed George Hack Prince-Bishop of Trent to “take refuge” there in 1463. He left in 1465. In 1530 it was bought by  Emperor Maximilian I, who installed his coat of arms in two places (above a door and on top of a chimney). Actually the date of 1530 for this appears at odds with the rest of the history on the web  page, which talks of the Emperor giving it to his chancellor in 1493, then to Georg von Frundsberg. One of these dudes blew up  the tower accidentally in 1520.

Then it was neglected until 1530 when it was bestowed to Sigmund von Brandis. After that it went to the Church of Trent (again) and they gave it to the Counts of Lichenstein-Castlecorno as a feud in around 1154. The Count Hans Jacon’s arms are on top of the entrance.


Detail of VMs folio f46v

Detail of the root on f46v

Compare with the right hand crest on this fresco in the Castle:

Heraldic shields in a fresco at Castle Runkelstein

Compare the angled blue striped shield at the left with the VMs tub on the outer figures ring  at 10 o’clock on f71r (R.Sale’s Fieschi arms)


Compare the tubs in f71r with the bath tub depicted in another fresco at the Castle:

A crowned chap in a bathtub in one of the Castle frescos

Crossbowman and Huntsman

Compare the head gear of the crossbowman in the VMs with that of the huntsman in red on a fresco in the castle. Also note the general shape of the bow and arrow in both pictures.

Chap holding crossbow in the Voynich Manuscript

Huntsmen on a fresco in the Castle

Sun and Moon

Compare the Sun and Moon in the VMs with their depictions in the Castle’s bathroom.

VMs Sun

VMs Moon

Sun and Moon in the Castle bathroom

(Sun/Moon image from

Symbol on f1r

Compare the “bird glyph” symbol on f1r with the shape of the crown being worn by the lady on a fresco at the Castle. (Note also the spreadeagle emblem of the Tyrol on the rug.)

"Bird glyph" on f1r

Unusually shaped crown being worn by a lady on one of the Castle frescos

Castles in the VMs

Compare the appearance of the three towers castle in the VMs Rosettes folio, and the Castle Runkelstein as depicted in its frescos:

Castle in the Rosettes folios

Detail of fresco at Castle Runkelstein

Now look at the shape of the VMs “Tower in a Hole” (as named by Rich Santa Coloma), and compare with the central tower in the above detail:

The VMs "Tower in a Hole"

Woman Holding Round Object

The interesting similarity here is the pose of the two women, which is almost identical. Also note they are both holding round objects, and wearing head dresses that have a central feature. The woman depicted on the Runkelstein fresco is Margarete Maultasch (“satchel-mouth”), countess and ruler of Tyrol (1318-1369) .

Naked lady holding object, wearing head dress

Woman holding a ball (playing a game) on one of the Castle frescos (note headdress)

Genetic Algorithm

February 26, 2010 Leave a comment

Basic Idea

In the plaintext, convert each group of 1, 2, 3 or 4 characters into a Voynich group of 1,2,3 or 4 characters. We call this a “mapping”. For example, when creating Voynich from Latin, a cipher mapping might be:

e => o, i => 9, …

er => 4o, is => ok, ti => 8a, …

ent => 9k, ant => A, …

… and so on. This can be encoded into an algorithm thus which maps strings in “repl” to strings in “seek”. For example:

	String seek[] = {"4ok1",
			 "1o", "oe", "oh", "4o", "ok", "8a", "89", "am", "1c", "oy", "o8", "co", "ay",
			 "k1", "h1", "19", "hc", "c9", "ha", "ae", "79", "2o", "cc", "ko", "ho", "c8", "9h",
			 "9k", "c7", "2c", "ka", "kc", "1a", "an", "h9", "o,", "e8", "k9", "ap", "8o", "e,",
			 ",1", "7a", "81",
			 "o",  "9",  "1",  "a",  "8",  "c",  "h",  "e",  "k",  "y",  "4",  "m",  ",",
			 "2",  "7",  "s",  "K",  "C",  "p",  "g",  "n",  "H",  "j",  "A"};

	String repl[] = {"un",
			 "ri", "on", "f",  "es", "g",  "em", "de", "se", "co", "ne", "ur", "si", "ic", "ui", "me",
			 "ere","eb", "la", "ma", "le", "id", "bu", "nti","no", "cu", "eba","qui","ie", "al", "ul",
			 "c",  "d",  "l",  "er", "is", "ti", "nt", "en", "re", "in", "um", "am", "us",
			 "te", "it", "v",  "tu", "ta", "ra", "di", "an", "ni", "li", "et", "ba", "ae", "mi",
			 "ent","st", "h",  "nd", "ci", "pe", "im", "ua", "io", "tur","il", "ve", "iu", "as",
			 "vi", "ita","ca",
			 "e",  "i",  "a",  "t",  "u",  "s",  "r",  "n",  "m",  "o",  "p",  "b", "q",
			 "qu", "at", "or", "ia", "ar", "ce", "ib", "ec", "ab", "ru", "ant"};

Such an algorithm is used inside a Chromosome of the Genetic Algorithm. The Chromosome decodes Voynich into Latin by  matching character groups in the Voynich word against each of the strings in the “seek” list in turn. If a match occurs, then the  Voynich group is translated into the Latin group in the “repl” list at the same position. Thus “4ok1” in Voynich is translated into “un” in Latin.

Once the Voynich word has been translated into Latin, the Latin word is looked up in a Latin dictionary. If the word is found, then the “cost” (or “quality”) of the Chromosome is increased … if the word is not found, then the cost is decreased. After all words in the Voynich text have been converted to Latin, and the aggregate cost of the Chromosome evaluated, it can be judged whether the mapping “seek” to “repl” is a good one or not.

Generating the Chromosome Population

We generate a large number of Chromosomes, each of which has a different, randomised, “seek” to “repl” mapping. We do this by simply shuffling the order of the “repl” strings in each Chromosome.

Thus, one Chromosome may map “4ok1” to “s” and another may map it to “qui”.

This population of Chromosomes is then evaluated: each Chromosome converts the Voynich words to Latin, and each then gets a cost. The higher the cost, the better. The highest possible cost would be a Chromosome that had a seek-repl mapping that produced a valid Latin word for each Voynich word.

Training the Chromosomes

The Chromosomes are ordered in decreasing cost, and then the best of them (i.e. at the top of the list) are “mated” together to produce offspring Chromosomes. The mating process essentially involves taking sequences of the “repl” strings from both parents and combining them to form a new “repl” string.

Some of the offspring Chromosomes are then “mutated”. This involves replacing one of the “repl” strings with some randomly selected letters from the Latin character set.

The process repeats (ordering the Chromosomes, mating the best ones, mutating the offspring) until a predefined cost value is reached, or the population of Chromosomes refuses to improve itself.

In the end, the best, trained Chromosome will contain the optimal arrangement of “seek” to “repl” mappings for conversion of Voynich to Latin.

The same procedure can be used for a Voynich to English, to German, French or any other language, provided that a dictionary and substantial texts are available to process.

First Results – Voynich to Latin

This is a limited attack on the first five “sentences” of f1r, using 200 chromosomes and a Latin dictionary of around 15,000 words. The best chromosome scores 9.4 after 500 training epochs (cf a score of 20 for a one-to-one translation of Latin into Latin).

Here are the deciphered sentences:

1) Voynich: fa19s 9hae ay Akam 2oe !oy9 ²scs 9 hoy 2oe89 soy9 Hay oy9 hacy 1kam 2ay Ais Kay Kay 8aN s9aIy 2ch9 oy 9ham +o8 Koay9 Kcs 8ayam s9 8om okcc9 okcoy yoeok9 ?Aay 8am oham oy ohaN saz9 1cay Kam Jay Fam 98ayai29

Latin: ?ereieas vias is asasita meas ?ereis ?astuas is quinti mensis asereis vis ereis sttunti viasita viis as?as alis alis qui? asisere? nti quere ere viis ?ita alamisis altuas ereis asis quiita quantis querenti ntiviquis ?asis qui amita ere am? asere?is viis alis ?is ?is isereere?viis