Toolora

Why word counters get Thai wrong

Thai writes without spaces between words, so splitting on whitespace gives a badly wrong count — and character counts have three valid answers.

Paste a Thai sentence into almost any online word counter and it will tell you it contains one word. That is not a glitch. It is what happens when a tool built for English meets a writing system it was never designed for.

Thai does not put spaces between words

English separates words with spaces, so counting them is trivial: split the text on whitespace and count the pieces. Nearly every word counter does exactly this, because for English it works perfectly.

Thai runs words together. Spaces do appear in Thai, but they mark phrase or sentence boundaries rather than word boundaries. A tool that splits on whitespace therefore sees an entire Thai sentence as a single token.

Text Whitespace split Real segmentation
สวัสดีครับผมชื่อโทลอร่า 1 word 7 words
วันนี้อากาศดีมาก 1 word 5 words
ฉันไปตลาดเมื่อเช้านี้ 1 word 6 words

The left column is what you get from a typical counter. The right column is closer to reality. This is not a rounding error — it is off by a factor of five or more.

The same problem affects Chinese, Japanese, Khmer, Lao and Burmese, all of which are written without inter-word spaces.

How real word segmentation works

With no spaces to rely on, software has to infer where each word ends. The standard approach is dictionary-based: try many possible ways of splitting the text, and choose the one that decomposes most cleanly into words that actually exist.

Modern browsers ship this capability built in, through a web standard called Intl.Segmenter. It is backed by ICU, the same Unicode library operating systems use for Thai text handling. That means good Thai segmentation does not require sending your text to a server — the browser can already do it.

It is very good, and it is not perfect

Dictionary segmentation handles ordinary prose well. Its weakness is predictable: words that are not in the dictionary. Personal names, brand names, recent loanwords and technical jargon all get split in odd places.

The clearest example is this site’s own name. โทลอร่า is not in ICU’s Thai dictionary, so it comes apart into three pieces:

โท | ล | อร่า

That is why the table above shows สวัสดีครับผมชื่อโทลอร่า as 7 words when a Thai reader would count 5 — the brand name alone accounts for two extra.

We would rather state this plainly than let you discover it yourself. If your text is dense with proper nouns, the count will run slightly high. No tool escapes this entirely without being taught the specific words.

Character counts have three valid answers

“How many characters is this?” sounds like it has one answer. It has three, and they can differ dramatically.

  • UTF-16 code units — what a programmer gets from .length. How the text sits in memory.
  • Code points — the count of Unicode characters.
  • Graphemes — what a person means by “one character”.

Thai is one of the clearest cases where these diverge, because Thai vowels and tone marks are separate code points that stack onto the consonant they modify.

Text Code units Code points Graphemes
ที่ 3 3 1
เพื่อน 6 6 4
👨‍👩‍👧‍👦 11 7 1

ที่ reads as a single character to anyone who reads Thai, but it is three code points: the consonant, a vowel and a tone mark. The family emoji is four separate emoji joined by invisible connector characters — eleven units in memory, one thing on screen.

When two tools disagree about a character count, it is usually not that one is wrong. They are answering different questions.

The limits that actually matter

SMS is where this costs real money. A plain English text message fits 160 characters, because it uses a compact character table called GSM-7.

That table contains no Thai letters. The moment a message contains even one Thai character, the whole message switches to UCS-2 encoding, and the limit drops to 70 characters.

Longer messages get split into segments and reassembled by the recipient’s phone. Each segment gives up a little space to the joining information, leaving about 67 characters per part — and you are billed per segment, not per message. This is why bulk Thai SMS costs noticeably more than people budget for.

Social platforms generally count code points rather than graphemes. Thai words carrying several vowels and tone marks therefore consume more of the limit than their visual length suggests. Specific limits change over time, so count against the real text rather than trusting a remembered number.

Reading time is an estimate, not a measurement

The “X minute read” figure you see on articles comes from English publishing convention, usually around 200 words per minute.

Thai words, once segmented, tend to be shorter than English words. Applying an English words-per-minute rate directly makes Thai text look slower to read than it is. Our tool adjusts the rate upward for Thai — but that adjustment is reasoned, not sourced from published research, and we say so on the tool itself.

Treat it as a way to compare the length of two drafts, not as a number to rely on.

Thai sentence counting is genuinely hard

English sentences end with a full stop, question mark or exclamation mark, which makes them reasonably countable.

Thai does not use a full stop to end sentences — it uses a space. But Thai also uses spaces between phrases, after conjunctions and around proper nouns. No simple rule separates the two cases.

Consider:

วันนี้อากาศดีมาก ผมไปเดินเล่นที่สวนสาธารณะ แล้วก็กลับบ้าน

A reader sees three sentences. Counting full stops gives zero. Counting spaces gives three. Standard ICU sentence segmentation returns one. None of the three approaches agrees with the reader.

Because of this, our tool marks the sentence count as approximate when it detects Thai. Any tool that reports an exact Thai sentence count without qualification is guessing on your behalf.

Try it with your own text

The word and character counter uses real Thai segmentation and counts characters the way a reader sees them, with the code-unit figure shown separately for people who need it.

Everything runs in your browser, so nothing you paste is uploaded — which matters if what you are measuring is an unpublished draft.