If you want to test folios or sections in the VMS yourself, here is the code for plotting:
Code:
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import comb
import argparse
import os
def calculate_binomial_distribution(n, max_length):
"""Berechnet eine Binomialverteilung für Wortlängen."""
k_values = np.arange(1, max_length + 1)
probabilities = [comb(n, k) * (0.5 ** n) for k in k_values]
probabilities /= np.sum(probabilities) # Normiert die Verteilung
return k_values, probabilities
def plot_binomial_distribution(word_lengths, max_length=15, n=10):
"""Visualisiert die Binomialverteilung basierend auf den Wortlängen in der Textdatei."""
if len(word_lengths) == 0:
print("Error: Keine Wörter in der Datei gefunden.")
return
# Berechnung der Binomialverteilung
k_values, binomial_probabilities = calculate_binomial_distribution(n, max_length)
# Berechnung der Häufigkeitsverteilung für das Histogramm
counts, bins = np.histogram(word_lengths, bins=np.arange(0.5, max_length + 1.5))
probabilities = counts / np.sum(counts) # Normalisieren
plt.figure(figsize=(10, 6))
# Histogramm der Wortlängen
bin_centers = (bins[:-1] + bins[1:]) / 2
plt.bar(bin_centers, probabilities, width=0.6, edgecolor='black', alpha=0.6, label='Calculated Distribution')
# Binomialverteilungskurve anpassen
plt.plot(k_values, binomial_probabilities, 'r--', marker='o', label='Theoretical Distribution')
# Achsenbegrenzungen setzen, um die Kurve korrekt darzustellen
plt.xlim(0.5, max_length + 0.5)
plt.xticks(np.arange(1, max_length + 1))
plt.xlabel('Word Length')
plt.ylabel('Probability')
plt.title(f'Binomial Distribution for n={n}')
plt.legend()
plt.grid(True)
plt.show()
def process_text_file(file_path):
"""Liests eine Textdatei ein und berechnet die Wortlängen."""
if not os.path.isfile(file_path):
print(f"Error: Die Datei {file_path} wurde nicht gefunden.")
return None
try:
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
except IOError as e:
print(f"Error: Ein Fehler ist beim Lesen der Datei aufgetreten: {e}")
return None
words = text.split()
word_lengths = [len(word) for word in words]
return word_lengths
def main():
parser = argparse.ArgumentParser(description="Visualisiert die Binomialverteilung basierend auf einer Textdatei.")
parser.add_argument('file', type=str, help='Pfad zur Textdatei')
args = parser.parse_args()
# Textdatei verarbeiten
word_lengths = process_text_file(args.file)
if word_lengths is not None:
plot_binomial_distribution(word_lengths, max_length=15, n=10)
if __name__ == "__main__":
main()

![[+]](https://www.voynich.ninja/images/collapse_collapsed.png)