string = "3 years ago a man named Aaron broke a record"
word = "Aaron"
def transform(string, word, takeWordsLeft, takeWordsRight, occ = 1):
words = string.split(' ')
result = []
for i in range(len(words)):
_word = words[i]
_result = []
if _word == word:
for j in range(max(0, i - takeWordsLeft), i):
_result.append(words[j])
for j in range(i, min(len(words) - 1, i + takeWordsRight) + 1):
_result.append(words[j])
result.append(_result)
# print(result)
if(occ > len(result)):
print("Cannot find %d number of occurences in the word"%(occ))
return ' '.join([])
return ' '.join(result[occ - 1])
print(transform(string, word, 3, 4))
Logi c
Функция принимает следующие аргументы:
- string: строка, в которой вы передаете текст
- word: шаблон, который вы хотите выбрать и найти несколько слов до и после этого слова
- takeWordsLeft: количество символов слева от найденного слова, которое вы должны рассмотреть. Подробнее будет объяснено позже
- takeWordsRight: количество символов справа от найденного слова, которое вы должны рассмотреть. Подробнее будет объяснено позже
- o cc: слово, которое вы даете, может встречаться в тексте много раз. Из всех этих случаев, какой вы хотите выбрать. Значение по умолчанию - 1
Итак, рассмотрим строку, приведенную в вопросе «3 года go. Человек по имени Аарон побил рекорд», скажем, слово, которое нас интересует, - «Аарон». Теперь, если я передам следующее в функцию
- transform (string, "Aaron", 3, 3): он найдет, найден ли Aaron в строке. В нашем случае, да, в строке есть ровно один Аарон. Теперь, когда takeWordsLeft равен 3, мы берем 3 слова слева от «Aaron», которые являются «a», «man», «named». Так как takeWordsRight равен 3, мы берем 3 слова справа от «Аарона», которые означают «сломался», «а» и «запись». Следовательно, мы выводим «человек по имени Аарон побил рекорд»
Пограничные случаи
- Пусть строка будет «3 года * go человек по имени Аарон побил рекорд и слово "Аарон". Если мы передадим transform (string, word, 3, 4), мы увидим, что хотя у нас есть 3 слова слева от «Aaron», у нас нет 4 слов справа от «Aaron». В этом случае он переводит все слова вправо до тех пор, пока не будет достигнуто количество слов takeWordsRight или не закончится количество слов справа. То же самое относится и к левому пределу.