25

我正在寻找一种将任何语言的 Unicode 字母字符音译为带重音的拉丁字母的方法。目的是让外国人深入了解以任何非拉丁文字书写的名称和单词的发音。

例子:

希腊语:Romanize("Αλφαβητικός")returns "Alphabētikós"(或“Alfavi̱tikós”)

日语:Romanize("しんばし")returns "shimbashi"(或“sinbasi”)

俄语:Romanize("яйца Фаберже")returns "yaytsa Faberzhe"(或“jajca Faberže”)

理想情况下,它应该支持以下脚本中的字符:CJK、印度语、西里尔语、闪米特语和希腊语。它应该是数据驱动和可扩展的,使用来自 Unicode 联盟、美国、欧盟或联合国的数据。代码应该是用 .NET 或 Java 编写的开源代码。

有这样的图书馆吗?

4

4 回答 4

19

问题比你想象的要复杂得多。

希腊语、西里尔文、印度语脚本、格鲁吉亚语 -> 琐碎,您可以在一小时内编写程序
泰语、日语假名 -> 更努力地完成
日语汉字、中文 -> 这些不是字母/音节,所以你不在事实音译,你在一个有希望的大字典中查找每个符号的发音(EDICT 和 CCDICT 应该可以工作),很多时候你会弄错,除非你也考虑上下文,特别是在
日韩-> 从技术上讲是一个字母,但计算机只能处理组合字符,所以你需要另一个大型数据库,我不知道有任何
阿拉伯语,希伯来语 -> 这些语言不写短元音,所以很多时候你的音译会像“bytlhm”(伯利恒)这样难以理解。我不知道有任何大型数据库将阿拉伯语或希伯来语单词映射到它们的发音。

于 2012-03-24T10:44:58.487 回答
10

您可以使用Unidecode Sharp  :

[a C#] 来自Python Unidecode的端口,它本身来自Perl unidecode的端口。(也有可用的PHPRuby实现)

用法;

using BinaryAnalysis.UnidecodeSharp;

.......................................

string _Greek="Αλφαβητικός";
MessageBox.Show(_Greek.Unidecode());

string _Japan ="しんばし";
MessageBox.Show(_Japan.Unidecode());

string _Russian ="яйца Фаберже";
MessageBox.Show(_Russian.Unidecode());

我希望,这对你有好处。

于 2013-03-01T17:04:10.430 回答
6

除了ICU之外,我不知道这里有任何开源解决方案。如果 ICU 对你有用,那就太好了。如果不是,请注意我是一家为此目的销售商业产品的公司的 CTO,该公司可以处理诸如中文单词、日语多重阅读和阿拉伯语不完整拼写等令人讨厌的情况。

于 2012-03-23T16:26:35.387 回答
5

Unicode Common Locale Data Repository有一些您可以使用的音译映射。

于 2012-03-23T19:38:42.713 回答