From dedd8e043a13e825b9bdd6088eaafcece002ed04 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Tue, 1 Jun 2021 15:16:02 +0200 Subject: [PATCH] Optimized counting words and characters via regex Signed-off-by: TheJackiMonster --- manuskript/functions/__init__.py | 15 ++++++--------- manuskript/util/counter.py | 16 +++++++--------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/manuskript/functions/__init__.py b/manuskript/functions/__init__.py index 59540b60..ef679e3a 100644 --- a/manuskript/functions/__init__.py +++ b/manuskript/functions/__init__.py @@ -24,17 +24,14 @@ MW = None def wordCount(text): - t = text.strip().replace(" ", "\n").split("\n") - t = [l for l in t if l] - return len(t) + return len(re.findall(r"\S+", text)) + def charCount(text, use_spaces = True): - t = text.strip() - - if not use_spaces: - t = t.replace(" ", "") - - return len(t) + if use_spaces: + return len(re.findall(r"[\S ]", text)) + else: + return len(re.findall(r"\S", text)) validate_ok = lambda *args, **kwargs: True def uiParse(input, default, converter, validator=validate_ok): diff --git a/manuskript/util/counter.py b/manuskript/util/counter.py index edd48819..1998fcc1 100644 --- a/manuskript/util/counter.py +++ b/manuskript/util/counter.py @@ -1,26 +1,24 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +import re + class CharCounter: @classmethod def count(cls, text: str, use_spaces: bool = False): - t = text.strip() - - if not use_spaces: - t = t.replace(" ", "") - - return len(t) + if use_spaces: + return len(re.findall(r"[\S ]", text)) + else: + return len(re.findall(r"\S", text)) class WordCounter: @classmethod def count(cls, text: str): - t = text.strip().replace(" ", "\n").split("\n") - t = [l for l in t if len(l) > 0] - return len(t) + return len(re.findall(r"\S+", text)) class PageCounter: