python взять несколько слов до или после указания c слова - PullRequest
0 голосов
/ 04 мая 2020

Я хочу выделить одно слово в тексте и напечатать несколько слов перед ним и несколько слов после него. например:

a = "3 years ago a man named Aaron broke a record"
word = "Aaron"
print(man named Aaron broke a record)

Ответы [ 5 ]

1 голос
/ 04 мая 2020
a = "3 years ago a man named Aaron broke a record"
word = "Aaron"
n = 2
wordlist = a.split()
try:
    pos = wordlist.index(word)
    print(wordlist[pos-n if pos>n else 0 : pos+n+1])
except ValueError:
    print("Not found")
0 голосов
/ 04 мая 2020
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 или не закончится количество слов справа. То же самое относится и к левому пределу.
0 голосов
/ 04 мая 2020

Предполагая количество слов до того, как определенное c слово известно -

words = a.split()
n = 2
print(" ".join(words[words.index(word)-n:]))

Это приведет к ошибке, если слово не появится в a. Возможное решение -

words = a.split()
n=2
if word not in words:
   print(f"{word} is not in {a}")
else:
   print(" ".join(words[words.index(word)-n:]))

Если words.index(word) < n, результат может быть не таким, как ожидалось. Возможное решение -

words = a.split()
n=2
if word not in words:
   print(f"{word} is not in {a}")
else:
   idx = max(0, words.index(word)-n)
   print(" ".join(words[idx:]))
0 голосов
/ 04 мая 2020
num = a.split().index('Aaron')
print(' '.join(a.split()[num-2:num+3]))
0 голосов
/ 04 мая 2020

Вы имеете в виду что-то подобное?

a = "3 years ago a man named Aaron broke a record"
word = "Aaron"
print("a man named", word, "broke a record")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...