I have been pushing this project ahead alongside some of my other work, and have some updates to share.
Web App / Git Repo
First, i have created You are not allowed to view links.
Register or
Login to view. (You are not allowed to view links.
Register or
Login to view.)that allows you to fully examine all page classifications against RZ's, Curriers, and LFD hands. You can also view the entire page level JS divergence scores, and outlier scores. Note, this classification scheme is referred to as 'Golf Regimes' in the app, this is my internal name, resulting from my habit of naming workstreams Alpha, Bravo, Charlie, etc.
Page-level RZ Comparison
RZ's classifications contain quite a bit more 'noise' than I thought from reading his write-up alone. The You are not allowed to view links.
Register or
Login to view. between our 2 clusters is 0.609, quite a bit lower than I had originally assumed. To be fair, his write-up says this is preliminary and he knows of several improvements he wants to make to his system, so the comparison below is for people to understand the current differences only.
I dug into some of the more obvious discrepancies, like the scattered Herbal A pages he groups into 'C', which his write-up labels 'Cosmological' but appears to mostly be a residual category with minimal cosmological content.
About half of these appear to be cases that are right on the edge of his classification system. For example,
- he places You are not allowed to view links. Register or Login to view. into C because 2/56 of its word contain ed. If it lost one of those, it would fall into the A category. f27 is an odd page i will discuss more below.
- f113r he places in Ce, at 12%, it just misses the B cutoff, and eo at 16.8% is just above the e-dialect cutoff. One additional ed word would push this into Bs
The other half appear to result from his hierarchical clustering system operating on a few rules:
- f80r, his single Cb classification, is because its ed is 10.8%, but it satisfies the Bio markers, creating its own category
- f116r satisfies markers for two of his classifications, but bio takes priority, so it gets put there instead of stars
- f107r -> C its ed share is 9%, even though it has strong stars markers, it cannot be placed there because its 'ed' percentage makes its main letter C
I'm not sure how these could be fixed, with just a few rules driving a rigid hierarchical clustering, slightly changing any of these would likely create other exceptions. It would probably require introduction of more features into the classification scheme.
JS Divergence Cluster Map
The website i shared above allows you to view the JS divergence between each pages word level transition matrix. Again, my method creates a glyph transition matrix, like start->ch -> o -> l -> end, and then calculates the JS divergence between that page and other pages. The central line represents the pages internal JS divergence, that is, if you split the page in half, and measure the JS divergence between both halves.
You can fully zoom and explore this chart in the app, below is a screenshot. In addition to viewing this for my clusters, you can view normal manuscript order, grouped by bifolium, and RZ's clusters.
New Possible Subdivisions
Close analysis of this matrix can reveal some interesting possible smaller subdivisions. For example, There is a smaller but noticeable difference between pharma and late Herbal A.
Early Herbal A also appears to have a noticeable split. I identified this previously, but it is not clear if it represents a continuum or two distinct clusters. These can be most easily separated by comparing the frequency of words beginning with cho* and words beginning with y*. The colors in the chart below are the categories assigned by ward clustering on the page level JS divergence.
A similar subdivision exists within stars. The splits are roughly equal in magnitude (i.e. total divergence between the groups), but the stars group separates more cleanly.
In both cases, these subdivisions are not as significant as the top level 'regimes'. I'm considering extending my classifications into more subdivisions to capture these differences.
You may notice other smaller groupings in the app's cluster-map, if you see something and are curious, just ask and i can look into it.
Improved Outlier Detection
I made two updates to my 'outlier' detection. Basically my clustering method attempts to create large groups, so it has difficulty with single page isolate 'outliers'. As a result, i created the 'outlier' detection mentioned in my OP. It involves measuring the JS divergence between two halves on one page, and then comparing that to its nearest neighbor, excluding other pages in the same bifolium.
This would manifest on the cluster map as mostly isolated darker lines.
This had a few possible shortcomings:
- first, i only ran my initial clustering algorithm on prose text, so some of the pages that are mostly labels or other loci were excluded. Expanding to include all loci, for instance, causes fRos (rosettes) to be the 3rd largest outlier, although still significantly below f58r/v. The app supports both versions, you can toggle between them with a selector.
- second was, this method can miss outliers that consist of two pages in different bifolium. They would each map to each other in the nearest neighbor search, and produce a low divergence score, even though the 2nd closest neighbor is actually far away, and the pair is isolated.
- Finally, probably the most significant, is how the outlier score is created. The outlier score is essentially the ratio of (how different is the page from nearest non-bifolium neighbor) / (how much difference exists within the page). f58r, at 1.7x, means the JS divergence to its nearest neighbor is almost double its internal variation. However, this method can have trouble with pages with low amounts of text, since the amount of text is extremely inversely correlated to internal divergence, -.8. This is somewhat expected, with less text, it is simply harder to know for sure if a page is an outlier or it is just a sampling artifact.
The chart below shows internal JS divergence (how much variance exists within the page) on the Y axis, and Nearest 2nd neighbor JS on the right axis, using all types of text loci (labels, spherical, etc). The full interactable chart is at the bottom of the You are not allowed to view links.
Register or
Login to view..
You can see f58r, f58v, and rosettes, are all cleanly isolated from the main group. These pages all have low internal variance, compared to how different their nearest neighbor is, which is why they have a high outlier score.
Looking to the right side of the graph though, shows a scattering of points that mostly all contain small amounts of text, including our friend You are not allowed to view links.
Register or
Login to view. I mentioned earlier, along with f57v.
To help to better understand if these divergence scores are just an artifact of a low amount of text, or genuinely seem to be different, i compared them against other similarly small batches of text from the same section. This confirms that many of these indeed are isolates. The full chart is also on the web-app.
- f27v is an odd page, for instance, it is the only page in the entire manuscript to not contain the sequence 'aiin' in any word, and several of its other character statistics differ quite a lot from other Early Herbal A pages. It is in the 99th percentile on this new short-page outlier metric.
- f57v shouldn't be a surprise, even after removing the singletons, the remaining 68 words are still unusual for its length
- f68v2 >99th percentile, but it lacks much comparable celestial material, tough to say
- f65v > 95th percentile, still elevated, but less decisive
- f96v > 99th percentile against other herbals. This is a strong candidate as another singleton outlier
For contrast, You are not allowed to view links.
Register or
Login to view. lands around the 50th percentile within Early A, and You are not allowed to view links.
Register or
Login to view. around the 2nd–4th. This method does distinguish ordinary short pages from unusually isolated ones.