| 22 | |
| 23 | |
| 24 | class PrevalenceCounter: |
| 25 | def __init__(self): |
| 26 | self.keyword_counts = defaultdict(int) |
| 27 | self.name_counts = defaultdict(int) |
| 28 | |
| 29 | def update(self, text): |
| 30 | self.update_keywords(text) |
| 31 | self.update_names(text) |
| 32 | |
| 33 | def update_names(self, text): |
| 34 | for parsed in sqlparse.parse(text): |
| 35 | for token in parsed.flatten(): |
| 36 | if token.ttype in Name: |
| 37 | self.name_counts[token.value] += 1 |
| 38 | |
| 39 | def clear_names(self): |
| 40 | self.name_counts = defaultdict(int) |
| 41 | |
| 42 | def update_keywords(self, text): |
| 43 | # Count keywords. Can't rely for sqlparse for this, because it's |
| 44 | # database agnostic |
| 45 | for keyword, regex in keyword_regexs.items(): |
| 46 | for _ in regex.finditer(text): |
| 47 | self.keyword_counts[keyword] += 1 |
| 48 | |
| 49 | def keyword_count(self, keyword): |
| 50 | return self.keyword_counts[keyword] |
| 51 | |
| 52 | def name_count(self, name): |
| 53 | return self.name_counts[name] |
no outgoing calls