@listify<EOL><INDENT>def extract_one(self, L, P, R):<DEDENT>
yield "<STR_LIT>"<EOL>if match(QUOTE, L):<EOL><INDENT>L = QUOTE_TOKEN<EOL><DEDENT>elif isnumberlike(L):<EOL><INDENT>L = NUMBER_TOKEN<EOL><DEDENT>else:<EOL><INDENT>yield "<STR_LIT>".format(min(len(L), CLIP))<EOL>if "<STR_LIT:.>" in L:<EOL><INDENT>yield "<STR_LIT>"<EOL><DEDENT>if not self.nocase:<EOL><INDENT>cf = case_feature(R)<EOL>if cf:<EOL><INDENT>yield "<STR_LIT>".format(cf)<EOL><DEDENT><DEDENT>L = L.upper()<EOL>if not any(char in VOWELS for char in L):<EOL><INDENT>yield "<STR_LIT>"<EOL><DEDENT><DEDENT>L_feat = "<STR_LIT>".format(L)<EOL>yield L_feat<EOL>yield "<STR_LIT>".format(P)<EOL>if match(QUOTE, R):<EOL><INDENT>R = QUOTE_TOKEN<EOL><DEDENT>elif isnumberlike(R):<EOL><INDENT>R = NUMBER_TOKEN<EOL><DEDENT>else:<EOL><INDENT>if not self.nocase:<EOL><INDENT>cf = case_feature(R)<EOL>if cf:<EOL><INDENT>yield "<STR_LIT>".format(cf)<EOL><DEDENT><DEDENT>R = R.upper()<EOL><DEDENT>R_feat = "<STR_LIT>".format(R)<EOL>yield R_feat<EOL>yield "<STR_LIT>".format(L_feat, R_feat)<EOL>
Given left context `L`, punctuation mark `P`, and right context
R`, extract features. Probability distributions for any
quantile-based features will not be modified.