Удалить часть строки (нижний регистр) и сохранить оригинал (верхний регистр) в Ruby - PullRequest
0 голосов
/ 05 февраля 2019

Я хотел бы удалить набор слов из строки рубина, используя строчную и безударную версию слов, и сохранить исходную строку с текущим регистром и текущими ударениями.

Например:

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

Полагаю, мне нужно использовать регулярное выражение ИЛИ получить способ получить индексы стоп-слов, чтобы удалить их из исходной строки.

1 Ответ

0 голосов
/ 05 февраля 2019

Кажется, что это работает:

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"

Это делает, как вы предложили - захватывает индекс, где стоп-слово соответствует вырезанной строке, и возвращает текст до и после этого.

Это то, что вы ищете?Дайте мне знать, как вы справляетесь с этим или если у вас есть какие-либо вопросы.

...