Чтобы функция работала, я изменил первую строку следующим образом:
def sentences_starting_with(w,corpus,length=2):
и использовал следующие вызовы данных и функций:
corpus='For example, This starts a sentence and This will do another one. this one, however\
will not, because we are looking for the word "This" with a capital letter.'
sentences_starting_with("this", corpus)
Значениеpattern=upper+w[1:]+'(\s\w*){2}'
равно This(\s\w*){2}
, что означает, что оно соответствует слову This
, за которым следует (\s\w*){2}
(два слова).Скобки вокруг \s\w*
охватывают последнее (второе) из двух захваченных слов, включая пробел перед ним - значение, третье слово, считая от This
:
[' a', ' do']
Я добавил круглые скобки вокруг всего шаблона:
pattern='('+upper+w[1:]+'(\s\w*){2})'
Так что теперь шаблон: (This(\s\w*){2})
, который имеет два набора скобок.Первый из них охватывает весь шаблон, поэтому он будет захватывать все совпадение (слово This
и два следующих слова), а второй - третье слово (с предшествующим ему пробелом), возвращая:
[('This starts a', ' a'), ('This will do', ' do')]
Затем вы можете просмотреть этот список и взять первый из каждого кортежа.
Чтобы упростить свой код, вы также можете добавить ?:
после (
группы (групп), которую вы наделилиНе хочу захватывать, например, (?:\s\w*)
.Теперь код:
pattern='('+upper+w[1:]+'(?:\s\w*){2})'
и он возвращает:
['This starts a', 'This will do']
Кроме того, это не очень хорошая практика:
upper=w[0].upper()
В этомВ этом случае проблем нет, поскольку функция upper()
является методом класса string
.Но если вы сделали что-то вроде этого:
len = len(w)
, это может вызвать дальнейшую проблему, потому что функция len
больше не доступна.Имя len
теперь относится к переменной len
.
В этом примере:
w = 'Some random text'
name='monty python'
len = len(w)
print(len)
len2 = len(name)
вывод будет:
16
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-349-9ef3e2e1cb59> in <module>
6 len = len(w)
7 print(len)
----> 8 len2 = len(name)
TypeError: 'int' object is not callable