通过查找特定于语言的字符来确定字符串的字母表

时间:2012-11-08 12:17:43

标签: language-agnostic

(这不是How to detect the language of a string?

的重复

我需要能够通过语言/字母表特定字符确定给定字符串(单个单词)的字母表。 例如,如果字符串包含:

  • 'Ü'应该被认为是德国人,
  • 'ش'as Arabic,
  • 'Φ'作为希腊语等等

我正在查找按语言/字母列出的字母表特定字符列表。使用GoogleTranslate API或其他基于字典的解决方案的单个非字典单词将无效

(虽然问题不是特定于编程语言,但实际代码是用C#编写的)

1 个答案:

答案 0 :(得分:3)

您可以从每个角色的unicode名称开始。例如(在Python中):

>>> import unicodedata
>>> unicodedata.name(u'Φ')
'GREEK CAPITAL LETTER PHI'
>>> unicodedata.name(u'ش')
'ARABIC LETTER SHEEN'
>>> unicodedata.name(u'Ü')
'LATIN CAPITAL LETTER U WITH DIAERESIS'

您可能必须使用特殊情况拉丁字符,因为Unicode不会将它们分配给特定语言的字母表。它们中的大多数都出现在使用基于拉丁语的字母表的几种语言中,但如果您确信您的数据仅包含Ü是德语,那么您可以将该字符识别为德语用于您的目的。只有几十个拉丁字符需要担心。

同样,大量语言使用Unicode CYRILLIC字母,因此在大多数情况下,它们的存在并不会告诉您语言。 Unicode将某些描述为属于特定语言。 CYRILLIC SMALL LETTER YIhttp://www.unicode.org/charts/PDF/U0400.pdf中有“Ukranian”字样。我不知道这些注释是否详尽无遗,即Ukranian是否是使用该字符的唯一语言。而且我确信有很多乌克兰语中没有那个字符。从根本上说,你不能仅仅通过乌克兰特定字母的存在与否来区分乌克兰语和俄语单词。

我希望Unicode中的其他字母表也是如此。如果你真的很幸运,你可能会找到一个Unicode数据库,其中包含每个角色的任何此类注释,因此您可以将其挖掘以提及特定语言。