Wortzahlregeln: Bindestriche, Kontraktionen, Emoji und Interpunktion
Zahlen Wörter mit Bindestrich, Kontraktionen und Emoji als ein Wort? Wie Microsoft Word, Google Docs und Stilhandbücher Interpunktion, Gedankenstriche und Unicode zahlen.
Fügen Sie denselben Absatz in drei verschiedene Wortzähler ein - Microsoft Word, Google Docs und ein beliebiges Browser-Tool - und Sie erhalten oft drei verschiedene Zahlen. Sie alle zählen “Wörter” in einem Dokument, das offensichtlich Wörter enthält. Warum die Uneinigkeit?
Weil “Wort” keine wohldefinierte Texteinheit ist. Es ist ein menschliches Konzept, das durch Regeln angenähert wird, und die Regeln variieren.
Brauchen Sie einfach nur eine Zahl? Unser Wortzähler verwendet Unicode-bewusste Tokenisierung und zeigt Wörter, Zeichen und Zeilen nebeneinander. Der Rest dieser Seite erklärt warum Zähler sich unterscheiden - Bindestriche, Kontraktionen, Emoji, Interpunktion und CJK-Text.
Die Leerzeichen-Aufteilung: Am schnellsten, am grob
Der einfachste Algorithmus ist: Den Text bei Leerzeichen aufteilen, die nicht-leeren Stücke zählen.
text.split(/\s+/).filter(Boolean).length
Das kommt dem Richtigen für einfaches Englisch nahe. “The quick brown fox jumps over the lazy dog” sind nach jeder vernünftigen Definition 9 Wörter, und die Leerzeichen-Aufteilung stimmt zu.
Es beginnt an den Rändern zu wackeln:
- Gedankenstriche ohne Leerzeichen:
"scharf-fokussierte Arbeit"wird als ein Wort geteilt, aber die meisten Leser würden drei sagen. - Zusammengesetzte Wörter mit Bindestrich:
"gut-dokumentiert"ist nach Leerzeichen ein Wort, aber einige Stilhandbücher zählen es als zwei. - Kontraktionen:
"don't"ist nach Leerzeichen ein Wort, womit die meisten Menschen übereinstimmen, aber wenn Ihr Teiler Apostrophe als Grenzen einschließt (einige tun das), werden es zwei. - Mehrfache Leerzeichen: Ein Absatz mit inkonsistenter Zeichensetzung zählt immer noch korrekt, wenn Sie auf
\s+(ein oder mehr) aufteilen, zählt aber falsch, wenn Sie auf das wörtliche Leerzeichen aufteilen. - Tabs und geschützte Leerzeichen (U+00A0): Wenn Ihr Teiler
\sverwendet, werden beide als Leerzeichen behandelt, was normalerweise das ist, was Sie wollen.
Unser Wortzähler verwendet eine Unicode-bewusste Leerzeichen-Aufteilung, die Gedankenstriche, Halbgestriche und Null-Breiten-Verbinder konsistent behandelt, was näher an dem liegt, was Menschen erwarten, als eine naive Aufteilung.
Der Wortgrenz-Ansatz: Sorgfältiger, langsamer
Moderne Wortzähler verwenden oft Unicode-Textsegmentierung (UAX #29), um “Wortgrenzen” zu identifizieren, anstatt nur bei Leerzeichen aufzuteilen. Der Algorithmus unterscheidet:
- Buchstaben (Unicode-Kategorie
L) - Ziffern (
N) - Verbindungsinterpunktion (
Pc) - Gedankenstriche, Anführungszeichen, Leerzeichen
Ein Lauf von Buchstaben und Ziffern (möglicherweise verbunden durch ' oder - in der Mitte) zählt als ein Wort. Alles andere - Interpunktion, Leerzeichen, Symbole - ist eine Grenze.
Dieser Algorithmus ist besser bei:
"it's"-> 1 Wort (der Apostroph ist intern)"scharf-fokussiert"-> 2 Wörter (der Gedankenstrich ist eine Grenze)"20mg"-> 1 Wort (der Ziffernlauf hängt an den Buchstabenlauf an)
Er ist schlechter (oder seltsamer) bei:
"hallo,welt"(kein Leerzeichen) -> 2 Wörter nach Segmentierung, 1 nach Leerzeichen-Aufteilung"O'Brien"-> 1 Wort (Apostroph ist intern), was die meisten Menschen wollen, aber ein Urteil ist
Die Microsoft Word- und Google Docs-Zahlen tendieren dazu, einem segmentierungsbasierten Ansatz nahe zu sein, mit einigen Anpassungen. Das ist ein Teil des Grundes, warum ihre Zahlen mit einfachen Aufteilungen nicht übereinstimmen - sie verwenden einen anderen Algorithmus, keine andere Definition.
Was sich ändert, wenn die Sprache sich ändert
Englisch macht das einfach, weil es Leerzeichen zwischen Wörtern verwendet. Die meisten anderen alphabetischen Sprachen auch - Französisch, Spanisch, Russisch, Griechisch. Wenn Sie dort bleiben, ist der Leerzeichen-Ansatz gut.
Die Sprachen, die den Ansatz vollständig durchbrechen:
- Chinesisch, Japanisch, Koreanisch (CJK) - keine Leerzeichen zwischen den meisten Wörtern. Eine Seite Chinesisch hat keine Leerzeichen wie Englisch. Das Zählen von “Wörtern” erfordert einen morphologischen Analysator, der weiß, wo ein Wort endet und das nächste beginnt, und die Antwort hängt von sprachlichen Konventionen ab, die je nach Region variieren.
- Thai, Laotisch, Khmer - schreiben auch ohne Zwischenwort-Leerzeichen.
- Arabisch, Hebräisch - verwenden Leerzeichen, aber die Morphologie ist komplexer (Präfixe und Suffixe hängen auf eine Weise an Stämme an, die beeinflusst, wie man zählt).
Für CJK-Text fallen die meisten Wortzähler auf Zeichenzählung zurück. Der Zeichenzähler zählt Unicode-Graphem-Cluster, was die richtige Einheit für CJK ist, weil jedes sichtbare Zeichen ungefähr “ein Wort” nach den Standards dieser Schriftsysteme ist.
Grapheme: Die Wendung
Selbst das Zählen von Zeichen ist nicht so einfach wie “Anzahl der Unicode-Codepunkte”. Betrachten Sie:
"é"kann ein Codepunkt sein (U+00E9, vorkomponiert) oder zwei (U+0065 + U+0301, Buchstabe + kombinierender Akzent). Beide werden identisch gerendert."👨👩👧👦"(Familien-Emoji) sind sieben Codepunkte, verbunden mit Null-Breiten-Verbindern, aber ein sichtbares Graphem."🇺🇸"(US-Flagge) sind zwei Codepunkte - ein regionaler Indikator fürUund einer fürS.
Wenn Ihre Zeichenzählung .length auf einem JavaScript-String verwendet, erhalten Sie die UTF-16-Code-Unit-Zählung, die alles außerhalb der Basic Multilingual Plane als zwei Einheiten behandelt. "👋".length === 2. Die meisten Benutzer betrachten das nicht als zwei Zeichen.
Die richtige Einheit für die meisten menschlich orientierten Zählungen ist der Graphem-Cluster - was ein Mensch als ein einzelnes sichtbares Zeichen wahrnimmt. Intl.Segmenter in modernem JavaScript stellt das zur Verfügung:
function graphemeCount(text) {
const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
return [...segmenter.segment(text)].length;
}
Das gibt 1 für "👨👩👧👦" zurück, was mit dem übereinstimmt, was ein Benutzer zählen würde.
Zeilen: Weniger mehrdeutig, aber immer noch kompliziert
Das Zählen von Zeilen klingt trivial: Zählen Sie die Zeilenumbrüche. Aber:
- CRLF vs. LF (Windows vs. Unix-Zeilenenden) - zählen die gleiche Anzahl von Zeilen, wenn Sie
\nzählen, aber unterschiedlich, wenn Sie\r\nseparat zählen. - Ein abschließender Zeilenumbruch - zählt die letzte leere Zeile? (POSIX sagt ja, Unix-Tools sind uneinig.)
- Zeilenumbruch - wenn eine Zeile in Ihrem Editor umgebrochen wird, weil sie zu lang für das Fenster ist, ist es immer noch eine logische Zeile, aber als zwei gerendert.
Der Zeilenzähler zählt logische Zeilen (durch jede Zeilenumbruchkonvention getrennt) und gibt Ihnen sowohl “Zeilen einschließlich abschließender Leerzeile” als auch “Zeilen ohne abschließende Leerzeile”, sodass Sie wählen können.
Welche Zählung man vertrauen sollte
Die Wahl des Wortzählalgorithmus hängt davon ab, was Sie messen:
- Formelles Schreiben gegen ein 2000-Wort-Limit - verwenden Sie das Tool, das die Behörde verwendet. Bei einer Zeitschriften-Einreichung ist die Zählung ihres Systems die einzige, die zählt. Bei einem Blogbeitrag oder einem allgemeinen Aufsatz ist jede vernünftige Zählung in Ordnung; der Unterschied zwischen 2000 und 2003 spielt keine Rolle.
- Zwei Entwürfe vergleichen - verwenden Sie jedes Mal dasselbe Tool. Absolute Zahlen sind weniger wichtig als das Delta.
- Übersetzungskostenschätzung - die Wortzahl variiert stark zwischen den Sprachen. Dieselbe Bedeutung auf Deutsch ausgedrückt ist typischerweise 20-30% mehr Wörter als auf Englisch; Japanisch ist nach Zeichenanzahl kürzer, hängt aber von Ihrer Zählmethode ab.
- UI-Zeichenlimits - verwenden Sie Graphem-Cluster, nicht UTF-16-Einheiten. Ein Benutzer, der ein Emoji eingibt, erwartet, dass es “ein” seiner erlaubten Zeichen belegt, nicht zwei.
- Datenbankspeicher - verwenden Sie Bytes (UTF-8 kodiert). Ein 255-Byte-
VARCHARkann weniger “Zeichen” halten, als Sie denken, wenn der Inhalt Multi-Byte-Zeichen enthält.
Die praktische Schlussfolgerung
Wenn zwei Wortzähler sich nicht einigen, haben beide recht - sie verwenden unterschiedliche Algorithmen. Die Frage ist nicht “welcher ist korrekt”, sondern “welcher Algorithmus passt zu dem Kontext, der mir wichtig ist”. Für die meisten Schreibaufgaben wählen Sie ein Tool, dem Sie vertrauen, und verwenden Sie es konsistent. Die absolute Zahl ist weniger informativ als der Trend.
Und wenn Sie jemals dabei erwischen, Wörter von Hand zu zählen, weil ein Tool falsch erscheint: Sie zählen nicht dasselbe wie das Tool. Finden Sie heraus, welchen Algorithmus das Tool verwendet, bevor Sie mit ihm streiten.
In diesem Artikel erwähnte Tools
- Word Counter - Count words, characters, sentences, paragraphs and estimate reading time.
- Character Counter - Count characters with platform-specific limits for Twitter, Instagram and more.
- Line Counter - Count total lines, blank lines and get line statistics.