Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何在英文字母中添加变音符号_Ruby_Unicode - Fatal编程技术网

Ruby 如何在英文字母中添加变音符号

Ruby 如何在英文字母中添加变音符号,ruby,unicode,Ruby,Unicode,我有一个字符串,例如: "Xin chao moi nguoi" 我想通过编程将该字符串转换为: "Xin chào mọi người" 我只是需要一个粗略的想法如何开始研究。有什么建议吗 这不是翻译。下面的两个字符串都来自一种语言,但第一个字符串忽略了发音符号。此程序将在英文字母中添加变音符号 a->ă您正在将英语翻译成越南语 使用谷歌api将字符串从一种语言转换为另一种语言的Ruby 我不确定是否有特定的库来解决您的情况,但我对Ruby中的所有内容都不熟悉。但是,您可以尝试以下方法:

我有一个字符串,例如:

"Xin chao moi nguoi"
我想通过编程将该字符串转换为:

"Xin chào mọi người"
我只是需要一个粗略的想法如何开始研究。有什么建议吗

这不是翻译。下面的两个字符串都来自一种语言,但第一个字符串忽略了发音符号。此程序将在英文字母中添加变音符号


a
->
ă

您正在将英语翻译成越南语


使用谷歌api将字符串从一种语言转换为另一种语言的Ruby

我不确定是否有特定的库来解决您的情况,但我对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(",")

您仍然需要将其分解成一个函数,并确定如果有多个单词匹配,该怎么办。

取决于您要做的事情。如果您只是用UTF-8编码字符串(以
#encoding:UTF-8
开始文件),您可以制作一个基本的更改字典:

conversions = {
  "a" => "á",
  "e" => "é"
}
#And so on... (or with words, as @Hannele said)
str.gsub(/[aeiou]/, conversions)
您可以根据自己的喜好随意更换任何转换。但是请记住,这将替换字符串中的所有元音。它不会做对人类语言有意义的事情。

您可以使用基本字符并合成结果字符:

   a   +   ̀      = à
U+0061 + U+0300
您可以使用标准化形式规范化分解(NFD)获得组合字符。相反,将多个字符组合成一个字符是规范化格式规范组合(NFC)


您可以用于合成和分解。

对于一对一的字符转换,有以下方法:


实际上你可以用任何语言称呼我。我只是需要一个粗略的想法,就像你在寻找的那种东西一样?如果同一个字母有时应该用某个变音符号出现,有时没有(或用不同的变音符号),那么随着信息的消失,就没有确定的方法可以做到这一点。什么时候添加哪个变音符号有确定的规则吗?如果没有它,您的问题将无法回答。@sawa问题标题编辑之前是这样的。Removing@IvayloStrandjev我以前不确定这个标题,但我想它是指拉丁字母,而不是拉丁语。如果是这样,那么写拉丁语比写英语更合适。或者,也许罗马字母是更流行的词。@sawa没错,没有办法单独看一个字母,但你可以使用一本单词词典(见我的答案)。+1但这是完全错误的,但OP不会从SO答案中得到他想要的
#encoding: utf-8
p "Xin chao moi nguoi".tr('aou', 'àọư')
#=>"Xin chàọ mọi ngưọi"