uroman

uroman

多语言通用罗马化转换工具

uroman是一款多语言通用罗马化工具,可将各种文字系统转换为标准拉丁字母。支持希腊语、印地语、乌尔都语和中文等多种语言,不仅进行字符替换,还能处理上下文和语言特定规则。提供Python和Perl版本,可通过命令行或Python库使用,适用于文本处理和语言分析任务。

uroman文本转换多语言支持罗马化UnicodeGithub开源项目

uroman

uroman是一个通用罗马化转写器。它可以将任何文字系统的文本转换为标准拉丁字母。<br>     例如(希腊语):Νεπάλ → Nepal<br>     例如(印地语):नेपाल → nepaal<br>     例如(乌尔都语):نیپال → nypal<br>     例如(中文):三万一 → 31000

  • uroman使得在不需要复杂的中间音标表示的情况下,能够对来自不同文字系统的文本应用字符串相似度度量。
  • uroman可以将各种文字系统中的数字转换为西方阿拉伯数字。
  • uroman使用多对多字符映射、上下文和用户提供的语言代码(可选),即uroman不只是简单地一对一替换字符。
  • uroman要求所有输入都使用UTF-8编码。

最新Python版本:1.3.1.1(2024年6月27日发布)<br> 最后一个Perl版本:1.2.8(2021年4月23日发布)<br> 作者:Ulf Hermjakob,南加州大学信息科学研究所
快速链接(本文档内):uroman命令行界面导入uroman旧版Perl版本更新历史可逆性局限性

(新)Python版本

安装

python3 -m pip install uroman

<a name="cli"></a>

命令行界面(CLI)

示例

python3 -m uroman "Игорь Стравинский" python3 -m uroman Игорь -l ukr python3 -m uroman Ντέιβις Καπ -l ell python3 -m uroman "\u03C0\u03B9" -d python3 -m uroman -l hin -i mini-test/hin.txt python3 -m uroman -l fas -i mini-test/fas.txt -o mini-test/fas-rom.jsonl -f edges python3 -m uroman < mini-test/multi-script.txt > mini-test/multi-script.uroman.txt python3 -m uroman -h

<b>注意:</b>对单个字符串使用_uroman_命令行界面可能对简单测试有用,但在大规模使用时效率低下,因为每次都需要加载数据资源。对整个文件进行罗马化或在Python内部使用_uroman_(如下所示)会更有效率。<br> <b>注意:</b>_mini-test_目录包含在本版本中。使用命令 <code>python3 -m uroman x --verbose</code> 可以找到它。 您可以将输出的mini-test/multi-script.uroman.txt与参考输出mini-test/multi-script.uroman-ref.txt进行比较。

uroman.py 参数结构要点

<table> <tr><td><i>直接输入(零个或多个)</i></td><td>如上面的'Игорь Стравинский'和'Ντέιβις'。</td></tr> <tr><td>-l<br>--lcode</td><td>语言代码,根据<a href="https://en.wikipedia.org/wiki/List_of_ISO_639-3_codes" target="_LCODE">ISO-639-3</a>标准,例如<i>-l ukr</i>表示乌克兰语,<i>-l hin</i>表示印地语,<i>-l fas</i>表示波斯语</td></tr> <tr><td>-i<br>--input_filename</td><td>替代选项:<i>stdin</i><br>注意:如果同时给出<i>直接输入</i>和<i>input_filename</i>,<i>直接输入</i>的罗马化结果将写入<i>stderr</i>。</td></tr> <tr><td width="200">-o<br><nobr>--output_filename</nobr></td><td>替代选项:<i>stdout</i></td></tr> <tr><td>-f<br>--rom_format</td><td>输出格式选项: <ul> <li> -f str &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(最佳字符串,默认,输出格式:字符串) <li> -f edges(最佳边缘,包含偏移信息,输出格式:JSONL) <li> -f alts &nbsp;&nbsp;&nbsp;&nbsp;(包含替代边缘的格点,输出格式:JSONL) <li> -f lattice(包含替代和被取代边缘的格点,输出格式:JSONL) </ul></td></tr> <tr><td>-d<br>--decode_unicode</td><td>解码Unicode转义序列,如将'\u03C0\u03B9'解码为'πι',然后再罗马化为'pi'。这对于JSON等输入格式很有用。</td></tr> <tr><td>-h<br>--help</td><td>使用此选项查看包含所有选项的完整参数结构。</td></tr> </table>

<a name="package"></a>

在Python内部使用_uroman_

示例

import uroman as ur uroman = ur.Uroman() # 加载uroman数据(大约需要一秒左右) print(uroman.romanize_string('Игорь Стравинский')) print(uroman.romanize_string('Игорь', lcode='ukr')) uroman.romanize_file(input_filename='mini-test/multi-script.txt', output_filename='mini-test/multi-script.uroman.jsonl', rom_format=ur.RomFormat.LATTICE)

方法

uroman = ur.Uroman(data_dir)

这个构造方法加载不同语言罗马化所需的数据。 这个构造方法调用可能需要大约一秒(实际时间)来加载所有罗马化数据,但对于多次后续罗马化调用来说,只需要执行一次。

<table> <tr><td>data_dir</td><td>数据目录(可选,默认:标准uroman数据目录)</td></tr> </table> <hr>

uroman.romanize_string(s, lcode, rom_format)

这个方法接受一个字符串<i>s</i>,并根据<i>rom_format</i>返回其罗马化形式:一个字符串(默认)或一个边缘列表。

<table> <tr><td>s</td><td>要被罗马化的字符串,例如 "ایران"</td></tr> <tr><td>lcode</td><td>语言代码,可选,3个字母的代码,如英语的'eng'(ISO-639-3)</td></tr> <tr><td>rom_format</td><td>输出格式选项: <ul> <li> ur.RomFormat.STR &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(最佳字符串,默认,输出格式:字符串) <li> ur.RomFormat.EDGES &nbsp;(最佳边界,包含偏移信息,输出格式:JSONL) <li> ur.RomFormat.ALTS &nbsp;&nbsp;&nbsp;&nbsp;(包含替代边界的格子,输出格式:JSONL) <li> ur.RomFormat.LATTICE (包含替代和被取代边界的格子,输出格式:JSONL) </ul> </table> <hr>

uroman.romanize_file(input_filename, output_filename, lcode)

此方法将文件 <i>input_filename</i> 罗马化到 <i>output_filename</i>

<table> <tr><td>input_filename</td><td>默认:标准输入&nbsp;(当input_filename值为 <i>None</i> 时)</td></tr> <tr><td width="200">output_filename</td><td>默认:标准输出&nbsp;(当output_filename值为 <i>None</i> 时)</td></tr> <tr><td>lcode</td><td>语言代码(可选),3个字母的代码,如英语的'eng'(ISO-639-3)</td></tr> </table>

<a name="old_perl_version"></a>

旧版Perl版本

<sup>GitHub上包含旧版Perl版本,但PyPI上不包含。</sup>

使用方法

$ uroman.pl [-l <lang-code>] [--chart] [--no-cache] < STDIN 其中可选的 <lang-code> 是3个字母的语言代码,例如 ara, bel, bul, deu, ell, eng, fas, grc, ell, eng, heb, kaz, kir, lav, lit, mkd, mkd2, oss, pnt, pus, rus, srp, srp2, tur, uig, ukr, yid。 --chart 指定图表输出(JSON格式)以表示替代的罗马化。 --no-cache 禁用缓存。

示例

<sup>注:目录 texttest 位于GitHub上 uroman 的根目录下。</sup>

uroman.pl < text/zho.txt uroman.pl -l tur < text/tur.txt uroman.pl -l heb --chart < text/heb.txt uroman.pl < test/multi-script.txt > test/multi-script.uroman-perl.txt

将输入识别为阿拉伯语、白俄罗斯语、保加利亚语、英语、德语、古希腊语、现代希腊语、本都希腊语、希伯来语、哈萨克语、吉尔吉斯语、拉脱维亚语、立陶宛语、马其顿语、奥塞梯语、波斯语、俄语、塞尔维亚语、土耳其语、乌克兰语、维吾尔语或意第绪语将改善这些语言的罗马化,因为这些语言中的一些字母与使用相同文字的其他语言(阿拉伯语与波斯语、俄语与乌克兰语、希伯来语与意第绪语)具有不同的音值。 此版本对其他语言无影响。

参考文献

Ulf Hermjakob, Jonathan May, and Kevin Knight. 2018. Out-of-the-box universal romanization tool uroman. In Proceedings of the 56th Annual Meeting of Association for Computational Linguistics, Demo Track. ACL-2018 Best Demo Paper Award. ACL文集中的论文 | 海报 | BibTex

<a name="change_history"></a>

变更历史

版本1.3.1的变更

  • 增加了Python版本。
  • 初步专门支持科普特语(埃及);显著改进了对泰语的支持;改进了对高棉语、藏语和几种印度语言的支持,包括更好的最终schwa删除。
  • 中文分数和百分比。
  • 各种小改进。

版本1.2.8的变更

  • 更新至Unicode 13.0(2021年),支持几种新的脚本(UnicodeData.txt增大10%)。
  • 改进了对格鲁吉亚语的支持。
  • 保留各种符号(而不是映射到符号的名称)。
  • 各种小改进。

版本1.2.7的变更

  • 改进了对普什图语的支持。

版本1.2.6的变更

  • 改进了对乌克兰语、俄语和奥甘文(古爱尔兰文字)的支持。
  • 增加了对英语盲文的支持。
  • 为马其顿语和塞尔维亚语(mkd2/srp2)添加了替代罗马化,反映了这些语言的许多母语使用者在用拉丁字母书写文本时采用的随意风格,例如使用非重音单字母(如"s")而不是语音动机的字母组合(如"sh")。
  • 当一行以"::lcode xyz "开头时,新的uroman版本将为该行切换到该语言。这用于新的参考测试文件。
  • 各种小改进。

版本1.2.5的变更

  • 改进了对亚美尼亚语和八种使用西里尔字母的语言的支持。 -- 对于经常同时使用西里尔字母和拉丁字母书写的塞尔维亚语和马其顿语,uroman将把两种官方版本映射到相同的罗马化文本,例如"Ниш"和"Niš"都将被映射为"Nish"(正确反映了这个城市名称的发音)。 对于塞尔维亚语和马其顿语,随意写作者经常使用不带变音符号的简化拉丁形式,例如使用"s"来表示不仅是西里尔字母的"с"和拉丁字母的"s",还包括"ш"或"š",即使这会混淆"s"和"sh"等对。可以通过使用替代uroman语言代码"srp2"和"mkd2"来模拟随意罗马化,这些代码将"Ниш"和"Niš"都罗马化为"Nis",以反映随意的拉丁拼写。
  • 各种小改进。

版本1.2.4的变更

  • 修复了在缓存模式下为每个空行生成两个空行的错误。

版本1.2的变更

  • 基于(1)基于令牌的缓存和(2)ASCII字符串的快捷罗马化(保持原样)对默认单最佳(非图表)输出进行运行时改进。对中等和大型文本的孟加拉语和维吾尔语处理速度提高了10倍。
  • 对波斯语、阿姆哈拉语、俄语、希伯来语及相关语言进行渐进改进。
  • 为英语的"罗马化"提供更丰富的格架结构(更多选择),以更好地匹配其他语言的罗马化。 仅在指定--chart选项时更改输出。默认单最佳输出不变,ASCII字符始终为输入字符串。

1.1版本的变更(重大升级)

  • 提供图表输出(JSON格式)以表示替代罗马化。
    • 第一个字符的位置定义为"行:1,起始:0,结束:0"。
  • 希伯来语和希腊语罗马化的渐进改进;中文数字改进。
  • 改进的网页界面(现在)位于https://uhermjakob.github.io/uroman.html
    • 当鼠标悬停在文本段上时,以红色显示相应的原文和罗马化文本。
    • 当鼠标悬停在带有虚线下划线的罗马化文本上时,显示替代罗马化。
    • 增加从右向左书写脚本检测,改进从右向左书写脚本文本的显示(逐行确定)。
    • 页面上支持一些用户计算机上通常未预装的脚本(缅甸语、古埃及语、克林贡语)。

1.0版本的变更(重大升级)

  • 将主要内部数据结构从字符串升级为格架。
  • 主要改进了南亚和东南亚语言的元音化。
  • 更一致地将元音'r'视为元音(不添加额外元音)。
  • 重复符号(日语/中文/泰语/高棉语/老挝语)映射为上标2。
  • 日语片假名中点现在映射为ASCII空格。
  • 藏语音节间标记现在映射为中点(U+00B7)。
  • 修正了一些关于中文数字分析的问题。
  • 更多外语变音符号和标点符号被删除或映射为ASCII。
  • 删除零宽字符,除了行/句首的字节顺序标记。
  • 空格标准化为ASCII空格。
  • 修复了在某些情况下将符号(如匕首或项目符号)映射为其文字描述的错误。
  • 使用新的uroman可视化diff工具对比测试了之前版本的uroman。
  • 速度提高了近一个数量级。

0.7版本的变更(小升级)

  • 为阿拉伯文脚本语言(包括维吾尔语)添加了uroman-quick.pl脚本。 速度更快,预缓存阿拉伯字符到拉丁字符的映射,简单的贪婪处理。 不会转换非阿拉伯文区块的材料,如维吾尔语文本中(不太常见的)西里尔字母或汉字。

0.6版本的变更(小升级)

  • 增加了对乌兹别克语中使用的两个字母字符的支持: (1) 字符"ʻ"("修饰符字母转逗号",修饰前面的"g"和"u"字母) (2) 字符"ʼ"("修饰符字母撇号",乌兹别克语用来标记声门塞音)。 两者现在都映射为"'"(普通ASCII撇号)。
  • 增加了对维吾尔语元音字符(如"ې"(阿拉伯e)和"ۆ"(阿拉伯oe))的支持, 即使它们前面没有"ئ"(带上加点的yeh)。
  • 增加了对阿拉伯语分号"؛"的支持,以及阿拉伯语连字形式的短语,如"ﷺ" ("sallallahou alayhe wasallam" = "愿真主赐福他及其家人并赐平安")
  • 增加了对阿拉伯字母呈现形式(首/中/尾/独立)的稳健性。 但强烈建议在调用uroman之前将任何呈现形式的阿拉伯字母标准化为非呈现形式。
  • 添加了强制刷新指令($|=1;)。

0.5版本的变更(小升级)

  • 改进了维吾尔语(请确保使用语言选项:-l uig)

0.4版本的变更(小升级)

  • 改进了泰语(元音/辅音重排的特殊情况,例如对"sara o";去掉了一些送气音'h')
  • 对阿拉伯语做了小改动(添加了"alef+fathatan" = "an")

0.3版本的新特性

  • 覆盖普通话(中文)
  • 改进了众多语言的罗马化
  • 保留大小写(例如来自拉丁、西里尔、希腊文字)
  • 将本地数字映射为西方数字
  • 对南亚语言处理更快

其他特性

<a name="reversibility"></a>

可逆性

  • 罗马化标准倾向于可逆映射。例如,作为独立元音,希腊字母ι(iota)和υ(upsilon)分别罗马化为i和y,尽管它们在现代希腊语中发音相同。
  • 然而,uroman_并不总是完全可逆的。例如,由于_uroman_将字母映射到ASCII字符,罗马化后的文本不包含任何变音符号,因此法语单词_ou("或者")及其同音词_où_("哪里")都映射为罗马化的_ou_。

<a name="limitations"></a>

局限性

  • uroman的当前版本有一些局限性,我们计划在未来版本中解决其中一些问题。 对于日语,uroman目前按预期罗马化平假名和片假名,但汉字被解释为汉字并按此罗马化。 对于埃及象形文字,目前只对单音标音字符和数字进行罗马化。 对于线性B文字,只对音节字符进行罗马化。 对于一些其他灭绝的文字系统如楔形文字,不提供罗马化。
  • 罗马化器不是完整的音译器。例如,此版本的 uroman不会对缺乏明确元音化的文本进行元音化,如 阿拉伯语和希伯来语的正常文本(无变音符号/点)。

致谢

该工具的早期版本部分基于国家情报总监办公室(ODNI)和情报高级研究计划活动(IARPA)通过合同#FA8650-17-C-9116提供的支持,以及空军研究实验室(AFRL)根据协议编号FA8750-19-1-1000赞助的研究。本文所含观点和结论均为作者个人意见,不应被解释为必然代表ODNI、IARPA、空军实验室、DARPA或美国政府的官方政策,无论明示或暗示。美国政府有权复制和分发本文内容用于政府用途,即使其中包含任何版权声明。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多