Project Icon

uroman

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

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

uroman

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

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

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

(新)Python版本

安装

python3 -m pip install uroman

命令行界面(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

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

uroman.py 参数结构要点

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

在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)

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

data_dir数据目录(可选,默认:标准uroman数据目录)

uroman.romanize_string(s, lcode, rom_format)

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

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

uroman.romanize_file(input_filename, output_filename, lcode)

此方法将文件 input_filename 罗马化到 output_filename

input_filename默认:标准输入 (当input_filename值为 None 时)
output_filename默认:标准输出 (当output_filename值为 None 时)
lcode语言代码(可选),3个字母的代码,如英语的'eng'(ISO-639-3)

旧版Perl版本

GitHub上包含旧版Perl版本,但PyPI上不包含。

使用方法

$ 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 禁用缓存。

示例

注:目录 texttest 位于GitHub上 uroman 的根目录下。

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

变更历史

版本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版本的新特性

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

其他特性

可逆性

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

局限性

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

致谢

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

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号