GlotScript has two parts:
- GlotScript-Resource: the writing systems of the languages of ISO 639-3 (8,035 listed, 7,503 with a main script), as ISO 15924 codes.
- GlotScript-Tool: a Python library that finds the script (writing system) of a text, of each of its parts and of each of its words, for all scripts of Unicode 18.0.0.
pip3 install GlotScript
# or the latest version from GitHub:
pip3 install GlotScript@git+https://github.com/cisnlp/GlotScript| Function | Short name | What it returns |
|---|---|---|
get_script_predictor() |
sp |
the main script of a text, its share, and the share of every script |
separate_script(text) |
sc |
the characters of each script, with the text's spaces |
script_segments(text) |
ss |
the text cut into single-script parts, with character offsets |
word_scripts(text) |
ws |
the main script of every word |
script_covers(writing_system, script) |
whether a writing system such as Jpan uses a script such as Hira |
All of them share one table of the scripts of Unicode characters, built the first time it is needed.
from GlotScript import sp
sp('これは日本人です')
>> ('Hira', 0.625, {'details': {'Hira': 0.625, 'Hani': 0.375}, 'tie': False, 'interval': 0.25})
sp('This is Latin')[:2]
>> ('Latn', 1.0)The text is scored after removing white space, ASCII punctuation and ASCII digits
(get_script_predictor(replace_punctuation=True, replace_digits=True), the settings of sp).
from GlotScript import sc
sc("Hello Salut سلام 你好 こんにちは שלום مرحبا")
>> {'Latn': 'Hello Salut ', 'Hebr': ' שלום ', 'Arab': ' سلام مرحبا', 'Hani': ' 你好 ', 'Hira': ' こんにちは '}Every script keeps all the spaces of the text, so its words stay in order.
from GlotScript import ss
ss("Hello Salut سلام 你好")
>> [('Latn', 0, 11, 'Hello Salut'), ('Zyyy', 11, 12, ' '), ('Arab', 12, 16, 'سلام'), ('Zyyy', 16, 17, ' '), ('Hani', 17, 19, '你好')]Each part is (script, start, end, text) with text[start:end] equal to the part, and the parts cover the whole
text in order. Combining marks (Zinh) take the script of the character before them. Spaces, digits and punctuation
(Zyyy) join the parts around them when both have the same script, and are their own part otherwise;
ss(text, common="separate") keeps every run of them separate.
from GlotScript import ws
ws("I love 你好, ok!")
>> [('I', 'Latn'), ('love', 'Latn'), ('你好,', 'Hani'), ('ok!', 'Latn')]A word's script is the most frequent one among its characters, not counting spaces, digits and punctuation
(combining marks count for the character before them); ties go to the script seen first. A word with no other
characters is Zyyy.
Some ISO 15924 codes name writing systems that combine Unicode scripts (Jpan = Han + Hiragana + Katakana, Kore =
Hangul + Han, Hanb = Han + Bopomofo, Hrkt = Hiragana + Katakana) or vary one (Hans, Hant).
script_covers tells whether a writing system, for example the script part of a language label such as jpn_Jpan,
uses a script found by sp, ss or ws; COMPOSITE_SCRIPTS lists these codes.
from GlotScript import script_covers
script_covers('Jpan', 'Hira'), script_covers('Kore', 'Hani'), script_covers('Latn', 'Cyrl')
>> (True, True, False)Zinh(Inherited): characters such as combining marks that take the script of the character before them. A few Arabic marks of this block are counted as Arabic.Zyyy(Common): characters used by many scripts, such as spaces, digits, punctuation and most symbols.Zzzz(Unknown): code points outside every script, andU+FFFD(the replacement character).
Script codes follow ISO 15924; the character ranges come from the Unicode Character Database (Unicode 18.0.0).
The character ranges are generated into GlotScript/ranges.py from the Unicode Character Database
(Scripts.txt and PropertyValueAliases.txt), with GlotScript's own adjustments listed in GlotScript/update.py
(Arabic harakat counted as Arabic, U+FFFD as Zzzz):
python -m GlotScript.update --version 19.0.0 # a new version, or latest
python -m GlotScript.update --check # does ranges.py match the data?
python tests/test_glotscript.pyWhich writing systems is each language written in?
| Language | CORE | AUXILIARY |
|---|---|---|
| Turkish (tur) | Latn | Arab, Cyrl, Grek |
| Thai (tha) | Thai | Latn |
| Vietnamese (vie) | Latn | Hani |
The full list is in metadata/GlotScript.tsv; see the metadata folder for its format and sources.
If you use any part of this our resource or tool in your research, please cite it using the following BibTex entry.
@inproceedings{kargaran-etal-2024-glotscript-resource,
title = "{G}lot{S}cript: A Resource and Tool for Low Resource Writing System Identification",
author = {Kargaran, Amir Hossein and
Yvon, Fran{\c{c}}ois and
Sch{\"u}tze, Hinrich},
editor = "Calzolari, Nicoletta and
Kan, Min-Yen and
Hoste, Veronique and
Lenci, Alessandro and
Sakti, Sakriani and
Xue, Nianwen",
booktitle = "Proceedings of the 2024 Joint International Conference on Computational Linguistics, Language Resources and Evaluation (LREC-COLING 2024)",
month = may,
year = "2024",
address = "Torino, Italia",
publisher = "ELRA and ICCL",
url = "https://aclanthology.org/2024.lrec-main.687",
pages = "7774--7784"
}