Can python read up to where a certain pattern is matched?

F. Petitjean littlejohn.75 at news.noos.fr
Mon Mar 8 14:31:36 EST 2004


On 07 Mar 2004 22:35:55 GMT, F. Petitjean <littlejohn.75 at news.noos.fr> wrote:
>> 
>> Please give a hint.  Thank you!
>> 
> the hint :
> import itertools
> help(itertool.takewhile)
> 
> # not tested (no python 2.3 on Debian gateway at home)
> 
> import itertools
< snip a piece of code full of bugs >
> 
> text = """\
> Some words here, and some other words. Then another
> segment follows, and more. This is a question, a junk
> question, followed by a question mark?"""
> 
> for sentence in readsentence(text):
>     print sentence

A lightly tested version :

def readsentence(iterable, ends = (".", "!", "?"), yield_fn=''.join):
    """generator function which yields sentences terminated by ends"""
    end_pred = ends
    if not callable(ends):
        end_pred = lambda c : c in ends
    it = iter(iterable)
    sentence = []
    add = sentence.append
    while True:
        c = it.next()
        if not end_pred(c):
            add(c)
        else:
            # Now add the item terminating the sentence
            add(c)
            t = tuple(sentence)
            if callable(yield_fn):
                t = yield_fn(t)
            yield t
            sentence[:] = []
            # add = sentence.append

    if sentence:
        t = tuple(sentence)
        if callable(yield_fn):
            t = yield_fn(t)
        yield t


Regards



More information about the Python-list mailing list