Поиск слов в тексте

#python

#python

Вопрос:

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

 text = “He gets. She gets away. She gets out. He gets past. He gets rid. He gives. She gives away. She gives up. He goes. He goes back. She goes on.”

vocabulary = {"gets":"получить","gets away":"уходить","gets out":"выбраться","gets past":"пройти мимо","gets rid":"избавиться","gives":"давать","gives away":"раздать","gives up":"сдаваться","goes":"идти","goes back":"возвращаться","goes on":"продолжать","She":"Она","He”:"Он"}
  

Я хочу получить такой результат.

 >>> Он получить. Она уходить. Она выбраться. Он пройти мимо. Он избавиться. Он давать. Она раздать. Она сдаваться. Он идти. Он возвращаться. Она продолжать.
  

Как я могу это сделать?

Комментарии:

1. Смотрите би-граммы и n-граммы.

Ответ №1:

Вы можете использовать re.sub с шаблоном чередования, сформированным путем объединения словарей от самого длинного к самому короткому, и заменить совпадение соответствующими значениями dict:

 import re
re.sub(r'b(?:%s)b' % '|'.join(sorted(vocabulary, key=len, reverse=True)), lambda m: vocabulary[m.group(0)], text)
  

Это возвращает:

 Он получить. Она уходить. Она выбраться. Он пройти мимо. Он избавиться. Он давать. Она раздать. Она сдаваться. Он идти. Он возвращаться. Она продолжать.