Как извлечь несколько перед словами после нахождения ключевого слова в тексте с помощью Python - PullRequest
0 голосов
/ 09 октября 2018

У меня есть ключевое слово "гроссмейстер", и я ищу ключевое слово в огромном тексте.Мне нужно извлечь 5 перед словами и 5 после слов ключевого слова (в зависимости от позиции, в которой оно может перейти и к следующему / перед предложению), и это ключевое слово многократно встречается в большом тексте.

Как след, сначала я попытался найти позицию ключевого слова в тексте, используя text.find(), и нашел ключевые слова в 4 разных позициях

>>positions
>>[125, 567,34445, 98885445] 

Поэтому попытался разделитьтекст, основанный на пробелах и содержащий первые 5 слов,

text[positions[i]:].split([len(keyword.split()):len(keyword.split())+5]

Но как извлечь 5 слов перед этим ключевым словом?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Используйте для этого модуль re .Для первого соответствия ключевого слова:

pattern = "(.+) (.+) (.+) (.+) (.+) grand master (.+) (.+) (.+) (.+) (.+)"
match = re.search(pattern, text)
if match:
    firstword_before = match.group(1) # first pair of parentheses
    lastword_before = match.group(5)

    firstword_after = match.group(6)
    lastword_after = match.group(10)

Круглые скобки в шаблоне указывают номер группы.Первая пара круглых скобок соответствует match.group (1), вторая пара круглых скобок соответствует match.group (2) и так далее.Если вы хотите использовать все группы, которые вы можете использовать:

match.groups() # returns tuple of groups

или

match.group(0) # returns string of groups

Для совпадения всех ключевых слов в тексте используйте re.findall.Подробнее читайте re .

PS: Есть лучшие способы написания шаблонов.Вот только я ленивый.

0 голосов
/ 09 октября 2018

Вы можете просто использовать

text[:position[i]].split()[-5:]
...