我有一个字符串,例如:
"Xin chao moi nguoi"
我想以编程方式将该字符串转换为:
"Xin chào mọi người"
我只是需要一个粗略的想法如何开始研究。有什么建议吗?
这不是翻译。下面的两个字符串都来自一种语言,但第一种语言错过了变音符号。这个程序会将变音符号添加到英文字母中。
a
- > ă
答案 0 :(得分:3)
我不确定是否有一个特定的库可以解决您的情况,但我不熟悉Ruby中的所有内容。但是你可以尝试类似下面的内容:
创建特殊编码单词的列表,以及基本字符到复杂单词的映射。
然后,当你有一个候选词的基本编码时,过滤你的列表,找到匹配的字符,逐个字符,保持那些与当前字符完全匹配,或者在映射中具有可接受的替代字符之前已定义过。
一个快速而又肮脏的例子:
wordList = ['chào', 'chao', 'chaobella'] #etc...
charMap = {'a'=>['a', 'à'], 'c'=>['c'], 'h'=>['h'], 'o'=>['o', 'ọ', 'ờ']} # etc...
word = 'chao'
filterList = wordList
# for each character in the word
word.split("").each_with_index do |char, index|
# get the list of characters you'd like it to match
matchingChars = charMap[char]
# select the words that match at this index
filterList = filterList.select{ |w| matchingChars.include? w.split("")[index] }
end
# filter out longer words
filterList = filterList.select{ |w| word.length == w.length }
puts "Words that match: " + filterList.join(",")
您仍然需要将其分解为一个函数,并确定如果有多个匹配的单词该怎么办。
答案 1 :(得分:2)
您可以使用Unicode combining characters并从其基本字符组成结果字符:
a + ̀ = à
U+0061 + U+0300
您可以使用Unicode decomposition获取组合字符,即规范化格式Canonical Decomposition (NFD)。将单个字符组成多个字符的反转是规范化形式Canonical Composition (NFC)。
您可以使用this Ruby Unicode library进行合成和分解。
答案 2 :(得分:1)
取决于你想做多少。如果你只是用UTF-8编码你的字符串(用#encoding: utf-8
开始你的文件),你可以做一个基本的改变字典:
conversions = {
"a" => "á",
"e" => "é"
}
#And so on... (or with words, as @Hannele said)
str.gsub(/[aeiou]/, conversions)
您可以根据自己的需要更换任何转换。但请记住,这将取代字符串中的所有元音。它不会对人类语言有意义。
答案 3 :(得分:1)
对于一对一的char转换,有tr方法:
#encoding: utf-8
p "Xin chao moi nguoi".tr('aou', 'àọư')
#=>"Xin chàọ mọi ngưọi"
答案 4 :(得分:-1)
您正在将英语翻译成越南语。
Ruby gem使用google api将字符串从一种语言翻译成另一种语言。