Spaces:
Build error
Build error
| import itertools | |
| import string | |
| def color_new_words(new: str, old: str, color: str = "#eefa66") -> str: | |
| """Color new words in strings with a span.""" | |
| def find_diff(new_, old_): | |
| return [ii for ii, (n, o) in enumerate(zip(new_, old_)) if n != o] | |
| new_words = new.split() | |
| old_words = old.split() | |
| forward = find_diff(new_words, old_words) | |
| backward = find_diff(new_words[::-1], old_words[::-1]) | |
| if not forward or not backward: | |
| # No difference | |
| return new | |
| start, end = forward[0], len(new_words) - backward[0] | |
| return ( | |
| " ".join(new_words[:start]) | |
| + " " | |
| + f'<span style="background-color: {color}">' | |
| + " ".join(new_words[start:end]) | |
| + "</span>" | |
| + " " | |
| + " ".join(new_words[end:]) | |
| ) | |
| def find_last_word(s): | |
| """Find the last word in a string.""" | |
| # Note: will break on \n, \r, etc. | |
| alpha_only_sentence = "".join([c for c in s if (c.isalpha() or (c == " "))]).strip() | |
| return alpha_only_sentence.split()[-1] | |
| def pairwise(iterable): | |
| """s -> (s0,s1), (s1,s2), (s2, s3), ...""" | |
| # https://stackoverflow.com/questions/5434891/iterate-a-list-as-pair-current-next-in-python | |
| a, b = itertools.tee(iterable) | |
| next(b, None) | |
| return zip(a, b) | |
| def sanitize(s): | |
| """Remove punctuation from a string.""" | |
| return s.translate(str.maketrans("", "", string.punctuation)) | |