Ok, I had a play with trying to use a Python dictionary to store the starts of sentences, and the results are very encouraging.
I'm defining the end of the first word in a sentence using the regex
[ ,\.\?:;] which I'm sure can be improved upon. Then store the results of that for every sentence in a dictionary, and check if a word is in that dictionary instead of looping over every sentence.
Because I've changed the rules about what consitutes a sentence start, the number of Complex Words varies slightly from the previous code. It seems to have a small impact on the scores though. And as mentioned above, this was a rough attempt to define the start of a sentence.
For
Oscar the time comes down from 26 minutes to 37 seconds, and for
IOO Classic Books I the time comes down from 2 hours 30 minutes to 1 minute 49 seconds. Some details:
I would guess that this needs much cleanup. I'm sure I've broken many rules in my first attempt to write something vaguely meaningful in Python

.
Work in progress is available
here