我想从红宝石字符串中删除一组单词,并使用单词的小写和无重音版本,并使用当前的大写字母和当前的重音符号保留原始字符串。
例如:
string = "Château Dupont Vallée du Rhône"
stopwords= "vallee du Rhone"
所需的输出:string = "Château Dupont"
到目前为止,我所能做的就是使用小写的不带重音的字符串来删除单词:
string = "chateau dupont vallee du rhone"
stopword = "vallee du rhone"
示例输出:string = "chateau dupont"
实际上,我想获取原始字符串,但使用单词的小写无重音版本删除字符串。
我的代码:
def remove_appellations_in_string(string, region_id)
down_trans_string = I18n.transliterate(string.dup)
# custom request to order by max length in name
stopwords.each do |stop|
# downcase/unaccent stopword
down_trans_stop = I18n.transliterate(stop.name.downcase)
# remove
down_trans_string.gsub!(down_trans_stop, ' ')
end
return ' ' + string + ' '
end
我想我需要使用一个正则表达式或一种获取停用词索引的方法,以将其从原始字符串中删除。
答案 0 :(得分:2)
这似乎可行:
string = "Château Dupont Vallée du Rhône"
stopword = "vallee du rhone"
index = I18n.transliterate(string).downcase.index(I18n.transliterate(stopword).downcase)
string[0..(index - 1)] + string[(index + stopword.length)..-1]
# => "Château Dupont "
stopword = "Dupont"
index = I18n.transliterate(string).downcase.index(I18n.transliterate(stopword).downcase)
string[0..(index - 1)] + string[(index + stopword.length)..-1]
# => "Château Vallée du Rhône"
它按照您的建议执行-获取停用词与剥离的字符串匹配的位置的索引,并在此之前和之后返回文本。
这就是你的追求吗?如果您有任何疑问,请告诉我。