Как найти сегмент предложения между знаками препинания, который содержит определенный термин поиска - PullRequest
0 голосов
/ 11 октября 2019

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

Я пробовал несколько различных комбинаций регулярного выражения lookahead и lookbehindшаблоны с различными результатами, но ни один из них не достигает результатов, которые я ищу. Я могу получить все между двумя одинаковыми знаками препинания, например, все между двумя периодами (то есть starlist = re.findall (r '([^.] ? Star Trek [^.] .)', SКажется, проблема в том, что когда я пытаюсь использовать группы, например [.;:,]? Кто-нибудь знает, как решить эту проблему?

s = 'Star Trek is an American media franchise, based on the science fiction television series; created by Star Trek legend Gene Roddenberry. The first television series, simply called Star Trek, and now referred to as "The Original Series", debuted in 1966 and aired for three seasons on NBC. It followed the Star Trek adventures of Captain James T. Kirk (William Shatner), and his crew aboard the starship USS Enterprise, a star exploration vessel built by the United Federation of Planets in the 23rd century. The Star Trek canon includes The Original Series: five Star Trek spin-off television series; an animated series; the Star Trek film franchise; and further adaptations in several media.'

starlist = re.findall('\w+ Star Trek \w+',s) #Successfully finds the word before and after

for x in starlist:
    print(x)

Если я использую код выше, я получаю следующие результаты:

по легенде Звездного пути

приключения Звездного пути

Канон Звездного пути

пять вращений Звездного пути

фильм Звездного пути

Однако я хочу получить следующие результаты:

Star Trek - это американская медиа-франшиза

, созданная легендой Star Trek Джином Родденберри

, который называется простоStar Trek

Это следовало за приключениями Star Trek капитана Джеймса Т. Кирка (Уильям Шатнер)

Канон Star Trek включает в себя Оригинальную серию

пять спин-оффов Star Trekтелесериал

франшизы Star Trek

1 Ответ

0 голосов
/ 11 октября 2019

Бум, испорти мою идеальную оценку репутации, пожалуйста.

import re

s = 'Star Trek is an American media franchise, based on the science fiction television series; created by Star Trek legend Gene Roddenberry. The first television series, simply called Star Trek, and now referred to as "The Original Series", debuted in 1966 and aired for three seasons on NBC. It followed the Star Trek adventures of Captain James T. Kirk (William Shatner), and his crew aboard the starship USS Enterprise, a star exploration vessel built by the United Federation of Planets in the 23rd century. The Star Trek canon includes The Original Series: five Star Trek spin-off television series; an animated series; the Star Trek film franchise; and further adaptations in several media.'

matches = re.findall('[.,]*[\w\s\']*Star Trek[\w\s\'-]*[,.]*',s)

for i,j in enumerate(matches):
    print(i,j)
...