yargy
1
2from yargy import Parser3from yargy.tagger import Tagger4from yargy.predicates import tag5
6
7INSIDE = 'I'8OUTSIDE = 'O'9
10
11class MyTagger(Tagger):12tags = {INSIDE, OUTSIDE}13
14def __call__(self, tokens):15for index, token in enumerate(tokens):16yield token.tagged(17OUTSIDE
18if index % 3 == 019else INSIDE20)21
22
23def test_tagger():24text = 'a b c d e f g'25A = tag('I').repeatable()26parser = Parser(A, tagger=MyTagger())27
28matches = parser.findall(text)29spans = [_.span for _ in matches]30substrings = [31text[start:stop]32for start, stop in spans33]34assert substrings == ['b c', 'e f']35