Skip to main content

Why Arabic, Urdu, Hindi and Chinese are harder for OCR

OCR was first built for Latin letters: separate, left to right, a few dozen shapes. Arabic and Urdu join letters and run right to left. Hindi stacks marks around letters. Chinese has thousands of characters. Each habit needs extra steps, and many engines skip some of them.

By the FastOCR team · Published · 9 min read

Who this is for

  • Anyone whose OCR result in Arabic, Urdu, Farsi, Hindi, Chinese or a similar script came out wrong or empty.
  • You need no technical background. Each term is explained the first time it appears.
On this page
  1. Why would a script make OCR harder?
  2. What goes wrong when letters are joined together?
  3. Why are Hindi and Bengali tricky?
  4. What is hard about Chinese, Japanese and Korean?
  5. What does right-to-left do to the result?
  6. Why do small accent marks matter?
  7. Does “supports 100+ languages” mean the same everywhere?
  8. How can I test OCR on my own script?
  9. When is OCR still the wrong answer?
  10. Frequently asked questions

Why would a script make OCR harder?

Because OCR (optical character recognition, software that reads text from a picture) has to cut a picture into letters before it can name them. Latin letters make that easy: they sit apart, in a line, left to right. Other scripts break one or more of those habits.

There are six habits to know: joined letters, marks around letters, huge character sets, vertical lines, right-to-left order, and small accent marks. A page can have several at once. Urdu, for example, joins letters, runs right to left and carries small marks. Below, each habit is explained with the scripts where it shows up.

What goes wrong when letters are joined together?

The engine cannot find where one letter ends. In Arabic, Persian and Urdu, letters in a word connect, and each letter changes shape depending on where it sits: start, middle, end or alone.

The same letter can therefore look like four different drawings. Some letter pairs also merge into one shape, called a ligature.

Urdu is often printed in Nastaliq, a sloping style where words step down a diagonal and letters overlap and tuck under each other. That is much harder to cut apart than the flatter style used for Arabic, which is why Urdu OCR needs an engine that has seen Nastaliq. Here is a short Arabic word written with connected letters: مكتبة (“library”). A reader sees one word, and an engine must decide how many letters it holds.

A printed Arabic book page: dense right-to-left lines of connected letters, with page heading and number at the top.
A real printed Arabic page, the same one our Arabic OCR page uses as its example. Every word is a chain of joined letters, and lines run right to left.

Why are Hindi and Bengali tricky?

Their letters carry extra marks that change the sound, and those marks sit above, below, before or after the main letter. Hindi uses Devanagari, and Bengali has a similar design.

A vowel sign attached to a consonant is called a matra. In Devanagari, one matra can print on the left of its consonant even though it is read after it. Consonants can also fuse into a single block called a conjunct, such as क्ष.

An engine that misses a small matra still gives a word that looks close, but it is a different word. These errors are easy to miss if you do not read the language, so check a few words on any Hindi OCR result.

What is hard about Chinese, Japanese and Korean?

The number of characters is large, and many look alike. Chinese and Japanese pages use thousands of characters in everyday text, compared with a few dozen letters in English. Japanese mixes several writing systems on one line.

Two things add trouble. First, text can run vertically, in columns read from right to left, which many engines do not expect. Second, characters that differ by one small stroke are different words, so a slight blur matters more than it does for English. Sharp, close-up pages help any Chinese OCR tool.

Korean is simpler in one way: its letters are packed into square blocks, so spotting the blocks is the main job.

What does right-to-left do to the result?

It can scramble the order of words, even when every word is read correctly. Arabic, Urdu, Farsi, Pashto and Hebrew run right to left, but numbers and any Latin words inside them still run left to right.

The engine must keep each line in its true reading order and handle those mixed pieces. For example, an Arabic sentence with a phone number in it goes right to left, flips to left to right for the number, then goes back. Table columns are another trap: an Arabic table starts at the right-hand column. Our guide to text that comes out backwards when pasted goes deeper into this one.

Why do small accent marks matter?

Because they change the word, and they are tiny. Vietnamese stacks two marks on one letter, for example a tone mark over a vowel that already has a hat. Arabic can print short vowel marks, called tashkeel, above and below the letters. Quran and school texts use them; newspapers usually do not.

A faint photo or a low-resolution scan can erase these marks first (more on that in why OCR makes mistakes). The result looks readable but has the wrong vowel, and in Vietnamese the wrong tone means a different word. If your page has marks, check a few words against the original after OCR.

Does “supports 100+ languages” mean the same everywhere?

No. A language list says an engine accepts a script. It does not say how the result reads on a real page. “Supported” can mean carefully tuned, or it can mean “will return something”.

Ask three things of any claim. Is the language fully supported or marked experimental? Was it tested on photos and scans, or only on clean printed text? Does the output keep the right order and the right letters?

For our own case, FastOCR’s searchable PDFs copy right-to-left lines back in reading order and read right-to-left columns of text from the right, and the Word export marks right-to-left paragraphs so Word lays them out correctly. We say what we cover, but you should still look at your own page.

How can I test OCR on my own script?

Use five of your own pages, type out one paragraph and every name, date and number by hand, run each tool on the same files, and count the differences. That takes about fifteen minutes and tells you more than any list.

Include your hardest page: the faint photo, the Nastaliq line or the table. Our guide to testing any OCR tool on your own documents gives the steps. For Arabic-script pages, also check the letters themselves (ی ک versus ي ك) and the direction of each line.

When is OCR still the wrong answer?

When the text already exists as real text. A PDF downloaded from a website or exported from a program often has a text layer you can copy directly. If the copy comes out garbled, that is a font problem, not a reading problem (see garbled Hindi from old PDF fonts), and OCR on the page image can still fix it.

Handwriting, very old print and decorative calligraphy also stay hard in every script. Plan to proofread those pages whatever tool you use.

Frequently asked questions

Why does OCR work on English but fail on my Urdu or Hindi page?

Many OCR engines were built and tuned for Latin letters first. Urdu and Hindi need the engine to read joined shapes, small marks above and below letters, and a right-to-left or stacked layout. Engines that skip those steps return nothing or garbage.

Does the OCR built into my phone or computer read Hindi, Urdu or Farsi?

Often not. Windows’ built-in OCR cannot read Hindi, Urdu, Farsi, Hebrew or Thai, and Apple’s has no Hindi, Urdu, Farsi or Hebrew. Chrome’s built-in OCR does read Persian letters. Check your own page rather than trusting a language list.

Why do Persian letters turn into Arabic ones after OCR?

Persian uses a few letters that differ from Arabic, such as ی and ک. Some engines only know the Arabic versions, ي and ك, so they swap them in. The text looks almost right but searching for the Persian word then finds nothing.

Is vertical Chinese or Japanese text a problem for OCR?

It can be. The engine must decide whether lines run top to bottom, and which column comes first. Horizontal printed text is usually easier than vertical text, and mixed pages with both are the hardest.

How can I tell whether an OCR tool is good enough for my script?

Run a few of your own pages through it, type out one paragraph and every name, number and date by hand, and count the differences. A claim on a website cannot tell you how your scans will read.

Try your own page

Upload a photo, scan or PDF in your script and read the result next to the original. No setup is needed to look at one page.

Sources

  1. Unicode Standard Annex #9: the Unicode Bidirectional Algorithm
  2. OmniDocBench: existing document benchmarks cover few document types (arXiv 2412.07626)

How we wrote this

The people who build FastOCR wrote this from our own testing and from how the product works today. We draft with AI help, then check every claim about FastOCR against the product. If something here is wrong or out of date, tell us and we will correct it.