<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
  <title>Daniel Auferbauer schreibt Blogbeiträge</title>
  <subtitle>Ich schreibe über diverse Themen rund um Webentwicklung und IT.</subtitle>
  <link href="https://auferbauer.net/blog-feed-de.xml" rel="self" />
  <link href="https://auferbauer.net/" />
  <updated>2025-07-15T00:00:00Z</updated>
  <id>https://auferbauer.net/</id>
  <author>
    <name>Daniel Auferbauer</name>
    <email>daniel@auferbauer.net</email>
  </author>
  <entry>
    <title>Creative Commons Signals: Fairness im Zeitalter der generativen KI?</title>
    <link href="https://auferbauer.net/de/blog/2025-07-15-2025-07-15_CC_signals/" />
    <updated>2025-07-15T00:00:00Z</updated>
    <id>https://auferbauer.net/de/blog/2025-07-15-2025-07-15_CC_signals/</id>
    <content type="html">&lt;p&gt;Creative Commons (CC) hat am 26. Juni 2025 das &lt;a href=&quot;https://creativecommons.org/2025/06/25/introducing-cc-signals-a-new-social-contract-for-the-age-of-ai/&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;CC Signals&lt;/em&gt;-Projekt öffentlich angekündigt&lt;/a&gt;. Signals wird als &amp;quot;ein großer Schritt nach vorne beim Aufbau eines gerechteren, nachhaltigeren Ökosystems für KI, das sich auf gemeinsame Vorteile stützt&amp;quot; vorgestellt. Signals befindet sich derzeit in einer Pre-Alpha-Phase, in der CC Feedback erbittet. Die eigentliche Alpha-Phase ist für November 2025 geplant. Ich war neugierig, wie sich CC ein nachhaltiges KI-Ökosystem vorstellen könnte und habe mich etwas mit dem Dokument auseinandergesetzt, das dem Vorschlag von Signals zugrunde liegt.&lt;/p&gt;
&lt;h2&gt;Einleitung&lt;/h2&gt;
&lt;p&gt;CC hat sich immer darum bemüht, einen Mittelweg für AutorInnen zu finden, zwischen &amp;quot;alle Rechte vorbehalten&amp;quot; und dem vollständigen Kontrollverlust bezüglich der eigenen Inhalte. Die Idee ist, dass jeder, der die Commons nutzt, im Gegenzug auch zu den Commons beitragen soll, indem er oder sie geteilte Inhalte entsprechend den Angaben des Autors bzw. der Autorin behandelt. Signals scheint nach einem Weg zu suchen, diese Idee an die neue Allgegenwärtigkeit der generativen KI (GenAI) anzupassen.&lt;/p&gt;
&lt;p&gt;Zugleich kommt es zu einer erneuten Diskussion betreffend die Regulierung von &lt;a href=&quot;https://de.wikipedia.org/wiki/Webcrawler&quot; target=&quot;_blank&quot;&gt;Web-Crawlern&lt;/a&gt; und &lt;a href=&quot;https://de.wikipedia.org/wiki/Screen_Scraping&quot; target=&quot;_blank&quot;&gt;Web-Scraping&lt;/a&gt;. Die Regulierung der automatischen Verarbeitung von Web-Inhalten begleitet das Web seit seinen Anfängen. Die heute allgegenwärtige &lt;code&gt;robots.txt&lt;/code&gt; wurde bereits 1994 eingeführt, &lt;a href=&quot;https://en.wikipedia.org/wiki/Robots.txt#History&quot; target=&quot;_blank&quot;&gt;um die übermäßige Belastung von Servern durch Web-Crawler zu regulieren&lt;/a&gt;.
Die Diskussion um die Ethik und Regulierung von Web-Crawlern und Web-Scraping rückte mit dem Aufkommen von Internetsuchmaschinen in den 2000er Jahren vermehrt ins Rampenlicht. Die weitreichende Wiederverwendung von gesammelten Inhalten lenkte die Aufmerksamkeit außerdem auf Urheberrechtsfragen. Zum Beispiel wurde Google in einem prominenten Fall aus dem Jahr 2006 &lt;a href=&quot;https://en.wikipedia.org/wiki/Field_v._Google,_Inc.&quot; target=&quot;_blank&quot;&gt;verklagt, weil ihr Seiten-Caching angeblich das Urheberrecht verletzt&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Im Laufe der Zeit hat man sich auf ein pragmatisches Übereinkommen verständigt, das keine explizite Rechtsgrundlage aufweist: Web-Crawler sind akzeptabel, solange sie eine Gegenleistung in Form von Website-Besuchern liefern. Mit anderen Worten, es ist in Ordnung, dass Google meine Seite mit einem Web-Crawler abruft, weil ich dadurch Besucher erhalte. Mit der Akzeptanz dieses impliziten sozialen Übereinkommens beruhigte sich die Diskussion um die Regulierung von Web-Crawlern.&lt;/p&gt;
&lt;h2&gt;Das zeitgenössische Problem&lt;/h2&gt;
&lt;p&gt;Der Aufstieg von GenAI und Large Language Models (LLM) hat das oben beschriebene soziale Übereinkommen untergraben. GenAI und LLMs verdanken ihr Dasein enormen Datenmengen, welche durch Web-Crawler und Web-Scraping beschafft werden. Diese Daten finden bei GenAI bzw. LLMs auf zwei Arten Verwendung:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;als &lt;em&gt;Trainingsdaten&lt;/em&gt; für das Modell selbst (d.h., die Daten sind in das LLM &amp;quot;eingebettet&amp;quot;).&lt;/li&gt;
&lt;li&gt;als &lt;em&gt;Erweiterung&lt;/em&gt; nach dem Training, als Reaktion auf eine Benutzereingabe, z.B. bei Retrieval Augmented Generation (RAG).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;GenAI wird selten, wenn überhaupt, unaufgefordert Quellen aus den eigenen Trainingsdaten referenzieren. Das ist unter zwei Gesichtspunkten relevant: 1) aus der Sicht von CC bedeutet dies, dass es keine &amp;quot;Attribution&amp;quot; gegeben wird, während es 2) im Hinblick auf das beschriebene soziale Übereinkommen bedeutet, dass keine Website-Besucher weitergeleitet werden.&lt;/p&gt;
&lt;p&gt;Bei RAG sieht die Sache ähnlich aus: wenn GenAI in Echtzeit Daten aus dem Web abruft, zitiert sie meiner Erfahrung nach mittlerweile oft. Während das dem Autor bzw. der Autorin Webseitenbesucher oder Anerkennung bringen &lt;em&gt;könnte&lt;/em&gt;, wird in der Realität durch die Aggregation und Zusammenfassung von Informationen der Anreiz für den Benutzer, die Website tatsächlich zu besuchen, stark reduziert.&lt;/p&gt;
&lt;h2&gt;CC Signals&lt;/h2&gt;
&lt;p&gt;Im Dokument &lt;a href=&quot;https://creativecommons.org/wp-content/uploads/2025/06/Human-Content-to-Machine-Data_Final.pdf&quot; target=&quot;_blank&quot;&gt;From Human Content to Machine Data&lt;/a&gt; argumentiert CC, dass die Untergrabung des sozialen Übereinkommens rund um die Web-Crawler zu einer Abschottung von Informationen führen wird, was nicht im Sinne des öffentlichen Interesses wäre.&lt;/p&gt;
&lt;p&gt;Um den öffentlichen Zugang zu Wissen aufrechtzuerhalten fordert CC für die Commons wechselseitige Beiträge von AutorInnen und KI-Modellen ein. CC schlägt sogenannte &lt;em&gt;Signals&lt;/em&gt; vor. Signals sind eine Reihe von Angaben, die KI-Modellen anzeigen sollen, welchen Beitrag sie zu den Commons leisten müssen.&lt;/p&gt;
&lt;p&gt;Signals können aus einer Kombination von vier Kernelementen bestehen. Diese Kernelemente sind derzeit noch sehr vage formuliert, sodass ich bestenfalls die Absicht dahinter verstehen kann, ohne Details zur Implementierung.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Credit&lt;/strong&gt;: Tut, was der Name sagt: dieses Signal erfordert &amp;quot;Attribution&amp;quot; im Sinne der CC, d.h. der Autor bzw. die Autorin muss klar ersichtlich sein. Das Signal bedingt mindestens eine Referenz auf den Trainingsdatensatz. Im Fall von RAG und ähnlichen Techniken muss ein Output die Quelle(n) mit Link zitieren.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct Contribution&lt;/strong&gt;: Dieses Element scheint darauf abzuzielen, die Kosten für die Bereitstellung von Daten zu erstatten. Ich interpretiere das folgendermaßen: wenn Sie beispielsweise eine Content-Plattform betreiben, verlangt die Verwendung dieses Signals eine gewisse Gegenleistung von KI-Betreibern, damit Sie nicht alleine auf den erhöhten Kosten durch Web-Crawler sitzen bleiben.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ecosystem Contribution&lt;/strong&gt;: Dieses Signal erscheint noch eher nebulös und wird wohl erst im Laufe der Alpha-Phase Gestalt annehmen. Augenscheinlich zielt es darauf ab, Gegenleistungen an ein breiteres System zu verlangen, als bei &amp;quot;Direct Contribution&amp;quot;. Derzeit fehlt mir die Fantasie, um daraus ein konkretes Beispiel abzuleiten.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open&lt;/strong&gt;: Ein präziser formuliertes Signal, das die Offenheit der KI-Modelle selbst als Gegenseitigkeit zu interpretieren scheint. Meiner Meinung nach wäre dieses Signal erfüllt, wenn ein KI-Betreiber die Gewichtung, Trainingsverfahren, Code usw. seines KI-Modells veröffentlicht. Im Wesentlichen also ist die Aussage: &amp;quot;Sie dürfen meinen Datensatz nur verwenden, wenn Ihr Modell vollkommen Open Source ist&amp;quot;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;CC schlägt vier Kombinationen von Signalen vor, die sie derzeit als sich gegenseitig ausschließend betrachten: Credit, Credit + Direct Contribution, Credit + Ecosystem Contribution und Credit + Open. (Ich bin mir nicht sicher, warum das Open-Signal die Verwendung von &amp;quot;Contribution&amp;quot; Signalen ausschließen sollte.)&lt;/p&gt;
&lt;h2&gt;Gemischte Signale&lt;/h2&gt;
&lt;p&gt;Beim Lesen von &lt;a href=&quot;https://creativecommons.org/wp-content/uploads/2025/06/Human-Content-to-Machine-Data_Final.pdf&quot; target=&quot;_blank&quot;&gt;From Human Content to Machine Data&lt;/a&gt;, erhalte ich gemischte Signale über Zweck und Zielgruppe (und bitte um Verzeihung ob des schlechten Witzes).
CC legt ihrer Argumentation die Aushöhlung des sozialen Übereinkommens zwischen AutorInnen und KI-Betreibern zugrunde. Das hat mich ursprünglich glauben lassen, dass ErstellerInnen von Blogs, Nachrichtenwebsites, Bildgalerien und ähnlichen Seiten Signale anwenden würden und dass solche AutorInnen anzeigen könnten, welche Form von Beitrag KI-Betreiber zu den Commons leisten sollen. Dass ich beispielsweise Signale an diesen Blog anhängen könnte, um anzuzeigen, dass ein LLM meine Seite referenzieren muss, wenn meine Inhalte in den Trainingsdaten verwendet wurden.&lt;/p&gt;
&lt;p&gt;Später im Dokument (S. 29) stellt CC klar, dass Signale dazu gedacht sind, &amp;quot;an &lt;em&gt;großen&lt;/em&gt; Sammlungen von Inhalten verwendet zu werden&amp;quot; (Betonung von mir hinzugefügt). Die Beschreibungen der Signale selbst legen nahe, dass Anbieter von großen Datensätzen, welche speziell für das KI-Training gedacht sind, die Zielgruppe darstellen.&lt;/p&gt;
&lt;p&gt;Dadurch entsteht in meinen Augen eine Lücke in der von CC geforderten Wechselseitigkeit: KI-Betreiber geben etwas an die Anbieter großer Datensätze zurück, aber nicht unbedingt an die Ersteller der Inhalte, die solche Datensätze ausmachen. CC selbst bringt im Rahmen ihrer Argumentation die Beispiele von StackOverflow und Reddit, wobei die jeweiligen Nutzer heftigst dagegen protestierten, dass die von ihnen erstellten Inhalte als Trainingsdaten für KI verwendet werden. Mir ist nicht klar, wie die beschriebenen Signale solches Ungemach lindern sollen, wenn sie nur die Plattform als Ganzes ansprechen.&lt;/p&gt;
&lt;h2&gt;Optimistische Wechselseitigkeit&lt;/h2&gt;
&lt;p&gt;CC ist der Meinung, dass Wechselseitigkeit &amp;quot;ein entscheidender Bestandteil für breite Akzeptanz&amp;quot; ist (&lt;a href=&quot;https://creativecommons.org/wp-content/uploads/2025/06/Human-Content-to-Machine-Data_Final.pdf&quot; target=&quot;_blank&quot;&gt;From Human Content to Machine Data&lt;/a&gt;, S.19). Ich teile diese Ansicht. Ich bin mir nicht sicher, ob große Akteure in der GenAI-Branche diese Ansicht ebenfalls teilen werden, nachdem ich mir folgende Fragen stelle:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Würden GenAI-Unternehmen bereits Trainingsdaten ihrer Modelle referenzieren, wenn dies einfach und ohne negative Folgen möglich wäre?&lt;/li&gt;
&lt;li&gt;Gibt es eine zuverlässige Möglichkeit zu beweisen, dass ein Modell mit einem Datensatz trainiert wurde, welcher mit Signals behaftet ist?&lt;/li&gt;
&lt;li&gt;Wurden aktuelle Modelle mit Material trainiert, das unter restriktiverem Urheberrecht als CC Signals steht?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;CC scheint sich zudem gewisser technischer Hürden bewusst zu sein und hält fest, dass sie &amp;quot;Normen für das, was &lt;em&gt;möglich ist&lt;/em&gt;, etablieren möchten, ohne das Perfekte zum Feind des Guten zu machen&amp;quot; (Hervorhebung aus dem Original, &lt;a href=&quot;https://creativecommons.org/wp-content/uploads/2025/06/Human-Content-to-Machine-Data_Final.pdf&quot; target=&quot;_blank&quot;&gt;From Human Content to Machine Data&lt;/a&gt;, S.26). Im &amp;quot;Credit&amp;quot; Signal findet sich ein Schlupfloch, das sich vermutlich darauf bezieht. In der Beschreibung des Signals wird eine Referenz im Falle von RAG verlangt, &amp;quot;wo es technisch möglich ist, Inhalte mit bestimmten Ausgaben in Verbindung zu bringen&amp;quot; (ebenfalls S.26). Das ist eine ziemlich große Ausstiegsmöglichkeit.&lt;/p&gt;
&lt;h2&gt;Abschließende Gedanken&lt;/h2&gt;
&lt;p&gt;Am Ende bleibt mir unklar, wie CC Signals dazu beitragen wird, das soziale Übereinkommen zwischen AutorInnen und KI-Betreibern wiederherzustellen. Wechselseitigkeit mit Datensatzanbietern und Plattformen bedeutet nicht unbedingt Wechselseitigkeit mit einzelnen AutorInnen, welche Inhalte für diese Plattformen erstellen. Ich bin gespannt darauf, wie die Alpha-Version von Signals im November aussehen wird.&lt;/p&gt;
&lt;p&gt;Nichtsdestotrotz gibt es kaum einen Zweifel an der Notwendigkeit einer Initiative wie Signals. Eine Woche nachdem CC mit Signals an die Öffentlichkeit gegangen ist, &lt;a href=&quot;https://blog.cloudflare.com/content-independence-day-no-ai-crawl-without-compensation/&quot; target=&quot;_blank&quot;&gt;kündigte Cloudflare an, dass sie beginnen werden, AI-Webcrawler standardmäßig zu blockieren&lt;/a&gt;. Cloudflare erklärt den 1. Juli zum &amp;quot;Tag der Inhaltsunabhängigkeit&amp;quot;. Während die Argumente von Cloudflare jenen von CC ähneln, scheint das Ziel ein rein monetäres Kompensationsmodell zu sein. Solcher Druck durch große Infrastrukturbetreiber könnte am Ende ausreichend sein, um große Akteure im GenAI-Bereich zu wechselseitigen Beiträgen zu den Commons zu bewegen.&lt;/p&gt;
&lt;p&gt;Die Aktion von Cloudflare zeigt ein zunehmendes Bewusstsein dafür, dass KI die etablierte Übereinkunft zwischen AutorInnen und Web-Scrapern gestört hat. Ich bin der Meinung, CC hat richtig erkannt, dass den AutorInnen der Commons eine Möglichkeit gegeben werden muss, ein Gleichgewicht zwischen Produzent und Konsument herzustellen. Es ist noch zu früh, um zu sagen, ob Signals das erreichen kann. Der Versuch und das zugrundeliegende Motiv sind sicherlich zeitgemäß.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Auf der Suche nach der geschätzten Lesezeit, Teil 2: Implementierung und Überprüfung.</title>
    <link href="https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/" />
    <updated>2025-06-11T00:00:00Z</updated>
    <id>https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/</id>
    <content type="html">&lt;h2&gt;Zusammenfassung&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ziel: Anzeige einer Lesezeitschätzungen in meinen Blogbeiträgen, deren Berechnung über die einfache Division der Wortanzahl durch eine pauschale Lesegeschwindigkeit hinausgeht.&lt;/li&gt;
&lt;li&gt;Hypothese: Die Anpassung der Lesegeschwindigkeit basierend auf der durchschnittlichen Wortlänge führt zu genaueren Lesezeitschätzungen als die Verwendung einer pauschalen Lesegeschwindigkeit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#verification&quot;&gt;Überprüfung&lt;/a&gt;: Experimente mit einer &lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#estimate&quot;&gt;JavaScript-Implementierung&lt;/a&gt; der angepassten Lesegeschwindigkeit und der pauschalen Lesegeschwindigkeit widerlegen die Hypothese.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#discussion&quot;&gt;Diskussion&lt;/a&gt;: Die Verwendung einer pauschalen Lesegeschwindigkeit in Wörtern pro Minute führt zu genaueren Schätzungen, die einfachere Berechnung ist daher zu bevorzugen.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Einführung &amp;amp; Wiederholung&lt;/h2&gt;
&lt;p&gt;Da ich mit dem &lt;a href=&quot;https://auferbauer.net/en/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/&quot;&gt;Stand der Technik zur Schätzung von Lesezeiten online&lt;/a&gt; nicht zufrieden war, habe ich mich auf die Suche nach einem besseren Algorithmus gemacht. Basierend auf einer Literaturanalyse und einer Abwägung von Genauigkeit gegen Praktikabilität entschied ich mich für Formeln, welche die durchschnittliche Wortlänge als Indikator für die Textkomplexität berücksichtigen:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lesegeschwindigkeit_en = 238 * 4.6 / durchschnittliche_wortlaenge_des_textes
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;lesegeschwindigkeit_de = 185 * 5.97 / durchschnittliche_wortlaenge_des_textes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Beide Formeln basieren auf der Arbeit von Brysbaert (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#csl-bib-Bry19&quot;&gt;Brysbaert 2019&lt;/a&gt;). Eine viel zu detaillierte Erklärung, warum ich diese Formeln gewählt habe, steht im &lt;a href=&quot;https://auferbauer.net/en/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/&quot;&gt;vorherigen Beitrag&lt;/a&gt;. Meine Erwartung war, dass die Verwendung einer derart angepassten Lesegeschwindigkeit genauere Schätzungen für die Lesezeit liefert.&lt;/p&gt;
&lt;p&gt;In diesem Beitrag beschreibe ich meine Implementierung dieser Theorie und meine Erkenntnisse aus der kritischen Prüfung der Implementierung. Die Ergebnisse sind etwas ernüchternd.&lt;/p&gt;
&lt;h2&gt;Implementierung&lt;/h2&gt;
&lt;p&gt;Ich habe die Formeln in reinem JavaScript implementiert, weil das die Sprache des &lt;a href=&quot;https://www.11ty.dev/&quot; target=&quot;_blank&quot;&gt;statischen Site-Generators ist, den ich verwende&lt;/a&gt;. Die Schätzung erfolgt zur Kompilierzeit und verwendet die kompilierten Blogbeiträge (d.h. HTML als String) als Eingabe.&lt;/p&gt;
&lt;p&gt;Da die Eingabe HTML enthalten wird, benötigt die Implementierung zwei Teile: 1) Bereinigung der Eingabe und 2) Berechnung der Lesezeit.&lt;/p&gt;
&lt;h3&gt;Eingabebereinigung&lt;/h3&gt;
&lt;p&gt;Ich muss vermeiden, dass HTML-Markierungen die Wortzählung beeinflussen, daher filtere ich zuerst alle HTML-Tags aus dem Eingabestring. Außerdem nehme ich alle Satzzeichen aus dem Text. Ich verwendete dazu Textparsing basierend auf regulären Ausdrücken. Hier passiert also keine Magie.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;sanitize&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;/** Remove any HTML tags, linebreaks, punctuation or hyphens from a string
 * 
 * For the purpose of later calculating reading rate and reading time of
 * the input text.
 * 
 * Regex used for matching HTML tags is taken from the `insane` npm library:
 * https://github.com/bevacqua/insane/blob/master/parser.js#L7
 * 
 * @param {string} inputText text to sanitize
 * @returns {string} input text sans any HTML tags, linebreaks, punctuation or hyphens
 */
const sanitizeMarkup = (inputText) =&amp;gt; {
    const regexStartTag = /&amp;lt;&#92;s*([&#92;w:-]+)((?:&#92;s+[&#92;w:-]+(?:&#92;s*=&#92;s*(?:(?:&amp;quot;[^&amp;quot;]*&amp;quot;)|(?:&#39;[^&#39;]*&#39;)|[^&amp;gt;&#92;s]+))?)*)&#92;s*(&#92;/?)&#92;s*&amp;gt;/gi;
    const regexEndTag = /&amp;lt;&#92;s*&#92;/&#92;s*([&#92;w:-]+)[^&amp;gt;]*&amp;gt;/gi;
    const regexNewLine = /[&#92;n&#92;r]/g;
    const regexPunctuation = /[&#92;.|&#92;?|;|,|:|!|&amp;quot;|&#39;] /g;
    const regexHyphens = / - /g;

    return inputText.replaceAll(regexStartTag, &#39;&#39;)
        .replaceAll(regexEndTag, &#39;&#39;)
        .replaceAll(regexNewLine, &#39; &#39;)
        .replaceAll(regexPunctuation, &#39; &#39;)
        .replaceAll(regexHyphens, &#39; &#39;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Berechnung der Lesezeit&lt;/h3&gt;
&lt;p&gt;Unter der Annahme, wir haben einen bereinigten Eingabestring, können wir diesen unter Verwendung von Leerzeichen als Trennzeichen aufteilen und das resultierende Array für alle weiteren Berechnungen verwenden (Wortanzahl, durchschnittliche Wortlänge usw.). Die Funktion zur Berechnung der Lesezeitschätzung akzeptiert einen optionalen Parameter, der angibt, ob die angepasste oder die pauschale Lesegeschwindigkeit verwendet werden soll. Das ist vor allem dem Umstand geschuldet, dass ich beide Berechnungsarten in meinen Tests vergleichen will.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;estimate&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;/** Takes a text and estimates the reading time based on average reading speed of the given language.
 * 
 * Reading speeds are taken from academic literature. You can find out more about choice of reading speeds
 * here: https://auferbauer.net/en/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/
 * 
 * You may opt to use an adjusted reading rate that takes average word length of the text vis-à-vis average
 * word length of that language into account. Refer to https://doi.org/10.1016/j.jml.2019.104047
 * 
 * @param {string} text the text for which you want to estimate reading time.
 * @param {string} language the language of the text (influences assumed reading speed in words per minute); takes either &#39;en&#39; or &#39;de&#39;, defaults to &#39;en&#39;.
 * @param {boolean} useAdjustedReadingRate whether you want to use an adjusted reading rate that takes average word length into account.
 * @returns {number} Estimated reading time of the text in seconds.
 */
const estimateTime = (text, language, useAdjustedReadingRate) =&amp;gt; {
    if(!text || typeof text !== &#39;string&#39;) {
        throw new Error(&#39;Text was not provided as string.&#39;);
    }

    let languageReadingRate = 0;
    let languageAvgWordLength = 0;
    switch (language) {
        case &#39;de&#39;:
            languageReadingRate = 185;
            languageAvgWordLength = 5.97;
            break;
    
        case &#39;en&#39;:
        default:
            languageReadingRate = 238;
            languageAvgWordLength = 4.6;
            break;
    }

    const words = text.split(&#39; &#39;).filter((word) =&amp;gt; {
        let trimmed = word.trim();
        return trimmed.length &amp;gt; 0;
    });
    
    const wordCount = words.length;
    const characterTotal = words.reduce(
        (characterTotal, word) =&amp;gt; characterTotal + word.length,
        0
    );

    const documentAvgWordLength = characterTotal / wordCount;
    const adjustedReadingRate = languageReadingRate * languageAvgWordLength / documentAvgWordLength;
    const readingTimeSec = (wordCount / (useAdjustedReadingRate ? adjustedReadingRate : languageReadingRate))*60;

    if (process.env.NODE_ENV === &#39;development&#39;) {
        console.debug(`Total characters: ${characterTotal}`);
        console.debug(`Word count: ${wordCount}`);
        console.debug(`Average word length: ${documentAvgWordLength}`);
        console.debug(`Adjusted reading rate (${language}): ${adjustedReadingRate}`);
        console.debug(`Estimated reading time (${language}): ${readingTimeSec} sec`);
    }
    
    return readingTimeSec;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a name=&quot;verification&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Überprüfung&lt;/h2&gt;
&lt;p&gt;Meine ursprüngliche Hypothese war, dass die eingangs beschriebenen Formeln eine präzisere Schätzung der Lesezeit liefern würde. Um diese Hypothese zu testen, benötige ich eine empirische Grundlage. Die Literatur bietet einige Textsammlungen, für welche die Lesezeit gemessen wurde. Aus der englischen Literatur habe ich die folgenden verwendet:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#csl-bib-FFT13&quot;&gt;Frank et al.&lt;/a&gt; bieten Eyetracking-Daten und selbstbestimmte Lesezeiten (48 bzw. 117 Probanden) für einen Korpus englischer Sätze. Ich habe neun Sätze (insgesamt 70 Wörter) zufällig für die Auswertung ausgewählt.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#csl-bib-TrD12&quot;&gt;Trauzettel-Klosinski und Dietz&lt;/a&gt; präsentieren eine einzelne Passage aus einem standardisierten internationalen Leseverständnistest (156 Wörter) einschließlich Lesezeitstatistiken für 436 Teilnehmer.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#csl-bib-SSA22&quot;&gt;Siegelman et al.&lt;/a&gt; bieten Eyetracking-Daten aus einem internationalisierten Korpus von Textpassagen. Ich habe willkürlich Passage #9 (200 Wörter) ausgewählt und die durchschnittliche Lesezeit von 42 Teilnehmern aus den öffentlich verfügbaren Daten berechnet.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Folgendermaßen hat die von meinem Code berechnete geschätzte Lesezeit im Vergleich zu den empirischen Messungen abgeschnitten:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Korpus&lt;/th&gt;
&lt;th&gt;Messung&lt;/th&gt;
&lt;th&gt;Schätzung&lt;/th&gt;
&lt;th&gt;Abweichung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.&lt;/td&gt;
&lt;td&gt;55.02s&lt;/td&gt;
&lt;td&gt;51.57s&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.&lt;/td&gt;
&lt;td&gt;40.4s&lt;/td&gt;
&lt;td&gt;37.04s&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.&lt;/td&gt;
&lt;td&gt;48.15s&lt;/td&gt;
&lt;td&gt;53.49s&lt;/td&gt;
&lt;td&gt;11%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Das ist ein anständiges Ergebnis. Die Abweichungen liegen innerhalb akzeptabler Grenzen (für meinen Zweck). Interessanterweise liefert die &lt;em&gt;nicht&lt;/em&gt; angepasste, pauschale Lesegeschwindigkeit sogar noch bessere Ergebnisse:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Korpus&lt;/th&gt;
&lt;th&gt;Messung&lt;/th&gt;
&lt;th&gt;Schätzung&lt;/th&gt;
&lt;th&gt;Abweichung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.&lt;/td&gt;
&lt;td&gt;55.02s&lt;/td&gt;
&lt;td&gt;53.95s&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.&lt;/td&gt;
&lt;td&gt;40.4s&lt;/td&gt;
&lt;td&gt;39.33s&lt;/td&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.&lt;/td&gt;
&lt;td&gt;48.15s&lt;/td&gt;
&lt;td&gt;50.17s&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Das ist ein erfreuliches Ergebnis, insofern als es Funktionalität meines Codes bestätigt. Allerdings bedeutet es auch, dass mein Versuch, ein besseres Maß für die Lesgeschwindigkeit zu finden, vergeblich war.&lt;/p&gt;
&lt;p&gt;Wie sieht es mit Lesezeitschätzungen für Deutsch aus? Es war deutlich schwieriger, Texte zu finden, die ich als empirische Grundlage für Deutsch verwenden kann. Es gibt nur zwei Quellen, für die sowohl der Text als auch die Messungen der Lesgeschwindigkeit verfügbar sind:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Das Potsdam Text Corpus (PoTeC) enthält Eyetracking-Daten für zwölf wissenschaftliche Texte auf Deutsch (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#csl-bib-JKR24&quot;&gt;Jakobi et al., 2024&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Der internationale Korpus von &lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#csl-bib-SSA22&quot;&gt;Siegelman et al.&lt;/a&gt;, den ich bereits für die Überprüfung auf Englisch verwendet habe, bietet auch deutsche Versionen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ich konnte PoTeC nicht als empirische Grundlage in Betracht ziehen, da die von mir aus den Rohdaten berechneten Leseraten &lt;em&gt;deutlich&lt;/em&gt; unter jenen lagen, die in der übrigen Literatur berichtet wurden (40 Wörter pro Minuten für manche Teilnehmer). Das ist vermutlich darauf zurückzuführen, dass ich falsch mit den Daten umgegangen bin. Unabhängig von der Ursache liegen die Werte so weit außerhalb der erwarteten Parameter, dass ich mich entschieden habe, PoTeC nicht zu verwenden.&lt;/p&gt;
&lt;p&gt;Damit bleibt mir der Text von &lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#csl-bib-SSA22&quot;&gt;Siegelman et al.&lt;/a&gt; als einziger Datenpunkt für eine Überprüfung:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Messung&lt;/th&gt;
&lt;th&gt;Schätzung&lt;/th&gt;
&lt;th&gt;Abweichung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;51.78s&lt;/td&gt;
&lt;td&gt;60.46s&lt;/td&gt;
&lt;td&gt;16%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nicht schlecht, nicht großartig. Allerdings: wie auch schon im Englischen lieferte die Verwendung einer pauschalen Leserate bessere Ergebnisse, im diesem Fall sogar noch eindeutiger:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Messung&lt;/th&gt;
&lt;th&gt;Schätzung&lt;/th&gt;
&lt;th&gt;Abweichung&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;51.78s&lt;/td&gt;
&lt;td&gt;54.81s&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a name=&quot;discussion&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Diskussion&lt;/h2&gt;
&lt;p&gt;Zu Beginn meiner Suche nach einer besseren Lesezeitschätzung stand die Hypothese, dass Berechnungen aufgrund einer pauschalen Lesegeschwindigkeit zu ungenauen Ergebnissen führen würden und dass es eine angepasste Lesegeschwindigkeit braucht, welche die Textkomplexität modeliert.&lt;/p&gt;
&lt;p&gt;Überraschenderweise war dies nicht der Fall. Für alle Textkorpora, für die Lesezeitmessungen verfügbar sind, liefern Berechnungen mit einer pauschalen Lesegeschwindigkeit exaktere Ergebnisse, als unter der Verwendung der angepassten Lesegeschwindigkeit. Während die Schätzungen basierend auf der angepassten Lesegeschwindigkeit um 6%-16% von den empirischen Messungen abweichen, weichen die Schätzungen aufgrund pauschaler Lesegeschwindigkeit nur um 2%-5% ab.&lt;/p&gt;
&lt;p&gt;Ich sehe keine Notwendigkeit, andere Ansätze zu untersuchen oder die Angelegenheit noch weiter unnötig kompliziert zu machen. Die pauschale Lesegeschwindigkeit basierend auf Wörtern pro Minute ist das robustere Werkzeug zur Schätzung der Lesezeit und funktioniert mehr als zufriedenstellend.&lt;/p&gt;
&lt;p&gt;Der &lt;a href=&quot;https://auferbauer.net/de/blog/2025-06-11-2025-06-11_reading_time_estimate_part_2/#estimate&quot;&gt;Code, den ich verwendet habe, um meine Hypothese zu überprüfen&lt;/a&gt;, ist daher nicht besser oder schlechter als der meiste andere Code zur Schätzung der Lesezeit, den man im Internet findet. Zum Zeitpunkt der Veröffentlichung dieses Beitrages verwende ich meinen Code, um die Lesezeiten auf diesem Blog zu schätzen. Damit kommt meine Suche nach der Schätzung der Lesezeit zu einem Ende. Letztendlich trifft das &lt;a href=&quot;https://de.wikipedia.org/wiki/KISS-Prinzip&quot; target=&quot;_blank&quot;&gt;KISS-Prinzip&lt;/a&gt; wieder einmal zu.&lt;/p&gt;
&lt;p&gt;Wir lesen uns im nächsten Beitrag!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Auf der Suche nach der geschätzten Lesezeit, Teil 1: Die richtige Formel.</title>
    <link href="https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/" />
    <updated>2025-04-29T00:00:00Z</updated>
    <id>https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/</id>
    <content type="html">&lt;p&gt;Auf meinem Blog möchte ich eine Lesezeit-Schätzung zu jedem Artikel hinzufügen.&lt;/p&gt;
&lt;p&gt;Das Problem scheint auf den ersten Blick gelöst zu sein: es gibt genug How-To-Artikel und Tutorials dafür. Allerdings gehen die meisten Beiträge zu dem Thema von einer universellen und fixen Lesegeschwindigkeit in Wörtern pro Minute aus. Dann wird einfach die Gesamtzahl der Wörter im Artikel durch diese Lesegeschwindigkeit geteilt und das war es dann.&lt;/p&gt;
&lt;p&gt;Das Problem ist also nicht wirklich gelöst. Zumindest bin ich mit diesem Ansatz nicht zufrieden. Er scheint mir zu simpel. Hat die Beschaffenheit des Textes keine Auswirkung auf die Lesegeschwindigkeit? Sicherlich hat ein technischer Artikel eine andere Lesegeschwindigkeit als ein Boulevard-Artikel. Und gilt diese magische universelle Lesegeschwindigkeit sowohl für Deutsch als auch für Englisch?&lt;/p&gt;
&lt;h2&gt;Faktoren, welche die Lesegeschwindigkeit beeinflussen&lt;/h2&gt;
&lt;p&gt;Wie sich herausstellt, gibt es viele Faktoren, welche die Lesegeschwindigkeit beeinflussen. Diese lassen sich grob in drei Kategorien einteilen, je nachdem, wo sie ihren Ursprung haben:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Es gibt Komplexität, die dem Text selbst innewohnt. Je höher diese Komplexität ist, desto langsamer wird die Lesegeschwindigkeit sein. Der Anteil langer Wörter (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-MiC71&quot;&gt;Miller and Coleman 1971&lt;/a&gt;; &lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-ROR02&quot;&gt;Radner et al. 2002&lt;/a&gt;) sowie die Satzstruktur  (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-Gib01&quot;&gt;Gibson 2001&lt;/a&gt;; &lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-PaN20&quot;&gt;Pauly and Nottbusch 2020&lt;/a&gt;) korrelieren mit dieser Komplexität.&lt;/li&gt;
&lt;li&gt;Manche Faktoren, welche die Lesegeschwindigkeit beeinflussen, gehen vom Leser selbst aus. Das sind z.B. Lesefertigkeit (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-ROR02&quot;&gt;Radner et al. 2002&lt;/a&gt;; &lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-TrD12&quot;&gt;Trauzettel-Klosinski and Dietz 2012&lt;/a&gt;) und Alter (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-TrD12&quot;&gt;Trauzettel-Klosinski and Dietz 2012&lt;/a&gt;; &lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-BKM19&quot;&gt;Brysbaert, Keuleers, and Mandera 2019&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Einige Faktoren hängen davon ab, wie der Text dargestellt wird und in welchem Umfeld der Inhalt konsumiert wird. Kontrast (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-LPL90&quot;&gt;Legge et al. 1990&lt;/a&gt;), Schriftgröße (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-BCB93&quot;&gt;Bailey, Clear, and Berman 1993&lt;/a&gt;) und Schriftart (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-MLB96&quot;&gt;Mansfield, Legge, and Bane 1996&lt;/a&gt;) gehören dieser Kategorie an.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sowohl die zweite als auch die dritte Kategorie sind für mich praktisch nicht zu bestimmen, weil ich keine Gewissheit habe, wie mein Blog dargestellt wird oder wer ihn liest. Daher bleibt mir nur die Komplexität als Einflussfaktor, den ich &lt;em&gt;a priori&lt;/em&gt; bestimmen kann.&lt;/p&gt;
&lt;h2&gt;Textkomplexität als Bestimmungsfaktor der Lesegeschwindigkeit&lt;/h2&gt;
&lt;p&gt;Weil die Textkomplexität der einzige bestimmbare Faktor für eine Schätzung der Lesegeschwindigkeit ist, muss ich ihren Einfluss modellieren können. Es gibt mehrere Theorien dazu, wie man Textkomplexität modellieren kann. Zwei populäre Beispiele aus der Literatur sind:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Dependency local theory&lt;/em&gt; (DLT) basiert auf der Hypothese, dass während dem Lesen kognitive Ressourcen für 1) die Speicherung der bisherigen Satzstruktur und 2) die Integration des aktuell gelesenen Wortes in diese Struktur aufgewendet werden. Die Hypothese besagt weiter, dass die Komplexität von der Entfernung der beiden zu integrierenden Elemente abhängt (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-Gib01&quot;&gt;Gibson 2001&lt;/a&gt;). Vereinfacht gesagt: Je länger und verschachtelter ein Satz ist, desto höher ist seine Komplexität.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Surprisal&lt;/em&gt; modelliert Komplexität als ein informationstheoretisches Konzept, welches die Erwartbarkeit jedes Wortes im gegebenen Kontext widerspiegelt (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-HCL16&quot;&gt;Henderson et al. 2016&lt;/a&gt;). Das bedeutet: Je unwahrscheinlicher ein Wort in einem bestimmten Kontext erscheint, desto höher ist seine Komplexität.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Eine vollständige Theorie der Komplexität wird wahrscheinlich beide dieser Maßnahmen integrieren müssen, da es Hinweise darauf gibt, dass DLT und Surprisal keine Korrelation aufweisen (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-DeK08&quot;&gt;Demberg and Keller 2008&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Obwohl diese Theorien von einem akademischen Standpunkt aus interessant sind, scheint ihre Anwendung für meinen Zweck wenig praktikabel. Der erwartete Zugewinn an Genauigkeit beim Schätzen der Lesegeschwindigkeit wird wahrscheinlich den Implementierungsaufwand nicht rechtfertigen. Ich suche letzten Endes nach einer Möglichkeit, die Lesezeiten für einen Blog zu schätzen, dessen Leserschaft optimistisch betrachtet aus fünf Leuten und einem LLM besteht.&lt;/p&gt;
&lt;h2&gt;Praktischer Ansatz: Lesbarkeitsbewertungen&lt;/h2&gt;
&lt;p&gt;Die direkte Anwendung der akademischen Theorien zur Textkomplexität erscheint mir für meinen Zweck übertrieben. Es gibt allerdings eine verwandte Art der Modellierung, die praktischer veranlagt ist: Lesbarkeitsbewertungen.&lt;/p&gt;
&lt;p&gt;Der bekannteste Lesbarkeitswert ist der Flesch Reading-Ease Index, soweit ich das nach meiner Internet-Recherche beurteilen kann. Weitere Beispiele sind der SMOG-Grad oder der Coleman-Liau-Index. All diese Bewertungen sind auf die englische Sprache abgestimmt. Im Gegensatz dazu sind die Wiener Sachtextformel und der Lesbarkeitsindex (LIX) gut auf Deutsch anwendbar (https://barrierefreies.design/werkzeuge/lesbarkeit-analysieren).&lt;/p&gt;
&lt;p&gt;Die meisten Lesbarkeitsbewertungen basieren auf der Berechnung der Länge von Sätzen und Wörtern, definiert durch die Anzahl der Silben, die sie enthalten. Daraus ergibt sich auch die Verbindung von Lesbarkeitsbewertungen zu den rein akademischen Theorien über Textkomplexität. Leider ist das auch ihr Nachteil in Bezug auf meine Problemstellung.&lt;/p&gt;
&lt;p&gt;Die Berechnung der Satzlänge an und für sich ist bereits nicht trivial. Denken Sie an Satzzeichen, die mitten im Satz stehen - wie z.B. in dem Satz, den Sie gerade lesen. Eine robuste Berechnung der Silbenanzahl scheint ebenfalls außer Reichweite. Es gibt vorschläge zur Berechnung, die allerdings von den Autoren selbst als ungenau bezeichnet werden (siehe &lt;a href=&quot;https://www.simoahava.com/analytics/calculate-readability-scores-for-content/&quot; target=&quot;_blank&quot;&gt;dieses Beispiel&lt;/a&gt;, &lt;a href=&quot;https://stackoverflow.com/questions/5686483/how-to-compute-number-of-syllables-in-a-word-in-javascript&quot; target=&quot;_blank&quot;&gt;dieses Beispiel&lt;/a&gt; oder auch &lt;a href=&quot;https://medium.com/@mholtzscher/programmatically-counting-syllables-ca760435fab4&quot; target=&quot;_blank&quot;&gt;dieses hier&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Geht es noch einfacher?&lt;/h2&gt;
&lt;p&gt;Lesbarkeitsbewertungen sind einfacher zu implementieren als die rein akademischen Theorien zur Textkomplexität. Dennoch stützen sich die meisten immer noch auf Metriken, die ich mit vertretbarem Aufwand nicht zuverlässig berechnen kann: Textlänge und Silbenanzahl.&lt;/p&gt;
&lt;p&gt;Muss ich mich also am Ende doch auf Wörter pro Minute verlassen? Die Antwort ist: &amp;quot;Nein, muss ich nicht.&amp;quot; Denn zum Glück hat jemand eine einfache Formel entwickelt, welche trotzdem auch die Komplexität berücksichtigt.&lt;/p&gt;
&lt;p&gt;2019 hat Brysbaert eine Meta-Überprüfung der Literatur zu Lesegeschwindigkeiten durchgeführt (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-Bry19&quot;&gt;Brysbaert 2019&lt;/a&gt;). Auch er hat Wörter pro Minute als Metrik für Lesegeschwindigkeiten gewählt (aufgrund deren hoher Akzeptanz). Er schlägt jedoch eine korrigierte Formel zur Berechnung der erwarteten Lesegeschwindigkeit vor: &lt;code&gt;238 * 4.6 / durchschnittliche Wortlänge&lt;/code&gt;. &lt;code&gt;238&lt;/code&gt; ist in diesem Fall der beste verfügbare Schätzwert für die Lesegeschwindigkeit in Wörtern pro Minute. &lt;code&gt;4.6&lt;/code&gt; ist die durchschnittliche Wortlänge in Sachtexten. Die Formel verwendet also Wörter pro Minute als Basis, berücksichtigt aber die Wortlänge zur Abbildung der Komplexität.&lt;/p&gt;
&lt;p&gt;Das scheint ein vielversprechender Ansatz zu sein. Eine pragmatische Formel ohne fehleranfällige Berechnung der Satzlänge oder Silbenanzahl. Auch wenn ein gewisses Risiko der übermäßigen Vereinfachung besteht, korreliert die Wortlänge gut mit dem Schwierigkeitsgrad des Textes (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-MiC71&quot;&gt;Miller and Coleman 1971&lt;/a&gt;). Dies wird auch von Radner et al. bestätigt, die feststellten, dass längere Wörter mit einer Verringerung der Lesegeschwindigkeit korrelieren (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-ROR02&quot;&gt;Radner et al. 2002&lt;/a&gt;). Daher werde ich die Wortlänge vorläufig als vernünftigen Indikator für die Komplexität betrachten.&lt;/p&gt;
&lt;h2&gt;Anpassungen für Deutsch&lt;/h2&gt;
&lt;p&gt;Da ich auch auf Deutsch schreibe, muss ich die Formel von Brysbaert noch an die durchschnittliche deutsche Lesegeschwindigkeit und Wortlänge anpassen. Leider gibt es keine Meta-Überprüfung für deutsche Lesegeschwindigkeiten, die diese Werte leicht zugänglich macht.&lt;/p&gt;
&lt;p&gt;Duden gibt eine &lt;a href=&quot;https://www.duden.de/sprachwissen/sprachratgeber/Durchschnittliche-Lange-eines-deutschen-Wortes&quot; target=&quot;_blank&quot;&gt;durchschnittliche Länge von 5.97 Buchstaben pro Wort&lt;/a&gt; an. Wenn die oberste Instanz für den deutschen Sprachkorpus das so sagt, darf man es schonmal einfach hinnehmen. Wenn es um die durchschnittliche Lesegeschwindigkeit geht, wird die Sache etwas weniger eindeutig.&lt;/p&gt;
&lt;p&gt;Radner &lt;em&gt;et al.&lt;/em&gt; berichten von einer Lesegeschwindigkeit von 209 Wörtern pro Minute für kurze Sätze und 170 Wörtern pro Minute für lange Sätze (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-ROR02&quot;&gt;Radner et al. 2002&lt;/a&gt;). Trauzettel-Klosinski und Dietz haben 179 Wörter pro Minute in einem internationalen standardisierten Test gemessen (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-TrD12&quot;&gt;Trauzettel-Klosinski and Dietz 2012&lt;/a&gt;). Pauly und Nottbusch berichten von einer durchschnittlichen Lesegeschwindigkeit zwischen 184 und 210 Wörtern pro Minute, je nach syntaktischer Satzstruktur (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-PaN20&quot;&gt;Pauly and Nottbusch 2020&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Aufgrund der referenzierten Literatur werde ich eine durchschnittliche Lesegeschwindigkeit von 185 Wörtern pro Minute für deutsche Leser annehmen. Die Überlegung dahinter ist, dass ich über technische Themen schreiben werde; daher ein Wert aus dem unteren Bereich. Allerdings bemühe ich mich normalerweise, die Komplexität meiner Texte zu verringern. Daher habe ich nicht die absolut niedrigste beobachtete Lesegeschwindigkeit gewählt. Ich werde diesen Wert bei Bedarf anpassen, sobald ich ein paar empirische Daten habe.&lt;/p&gt;
&lt;h2&gt;Das Ergebnis&lt;/h2&gt;
&lt;p&gt;Zusammengefasst lauten die Formeln, die ich vorläufig zur Berechnung der Lesegeschwindigkeit verwenden werde:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lesegeschwindigkeit_en = 238 * 4.6 / [durchschnittliche_wortlänge_des_beitrags]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;und&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lesegeschwindigkeit_de = 185 * 5.97 / [durchschnittliche_wortlänge_des_beitrags]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;für Englisch bzw. Deutsch. Unter Berücksichtigung aller mir bekannten Literatur scheint dies der beste Kompromiss zwischen Pragmatismus und Berücksichtigung  von Textkomplexität zu sein. Gemäß der Literatur (&lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-Bry19&quot;&gt;Brysbaert 2019&lt;/a&gt;;  &lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-MiC71&quot;&gt;Miller and Coleman 1971&lt;/a&gt;; &lt;a href=&quot;https://auferbauer.net/de/blog/2025-04-29-2025-04-29_reading_time_estimate_part_1/#csl-bib-ROR02&quot;&gt;Radner et al. 2002&lt;/a&gt;) erwarte ich, dass die Wortlänge eine vernünftige Annäherung an die Gesamtkomplexität darstellt.&lt;/p&gt;
&lt;p&gt;Schließlich lautet die Formel zur Schätzung der Lesezeit eines bestimmten Blogbeitrags in Minuten:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lesezeit_minuten = [wörter_im_beitrag] / lesegeschwindigkeit
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Einschränkungen&lt;/h3&gt;
&lt;p&gt;Ich habe mir einige Freiheiten genommen, was die Zahlen aus der Literatur betrifft. Ich habe die Schriftsetzung, mit der die durchschnittlichen Lesegeschwindigkeiten ermittelt wurden, völlig außer Acht gelassen. Viele Faktoren abseits der Textkomplexität, die ich selbst (möglicherweise suboptimal) gewählt habe, könnten die durchschnittliche Lesegeschwindigkeit auf meiner Website beeinflussen: Kontrast, Schriftart, Schriftgröße, Zeilenlänge usw.&lt;/p&gt;
&lt;p&gt;Natürlich ist jede Herleitung von Formeln in meinem Beitrag als hypothetisch zu betrachten. Es fehlt bisher jegliche kritische Prüfung. Eine solche kritische Prüfung würde den Rahmen eines einzelnen Blogbeitrags überschreiten.&lt;/p&gt;
&lt;h2&gt;Was nun?&lt;/h2&gt;
&lt;p&gt;Im nächsten Beitrag werde ich eine Implementierung der vorgeschlagenen Formel beschreiben. Ich werde JavaScript verwenden, um die Lesezeit von Blogbeiträgen im Markdown- bzw. HTML-Format zu schätzen. Sobald das implementiert ist, werde ich einige empirische Tests der berechneten Lesezeiten durchführen. Bleiben Sie dran!&lt;/p&gt;
</content>
  </entry>
</feed>