рассчитать процент пунктуации в строке в Python - PullRequest
0 голосов
/ 14 ноября 2018

Я работал над вычислением процента знаков препинания в предложении. По какой-то причине моя функция работает при выполнении двойного интервала, но подсчитывает все символы и пробелы. Например, у меня есть текст DEACTIVATE: OK, поэтому полная полная длина равна 14, когда я вычитаю пунктуацию, тогда длина равна 13, поэтому процент должен быть 1/13 = 7.63%, однако моя функция дает мне 7,14%, что в основном составляет 1/14 = 7.14%.

С другой стороны, если есть только один пробел, моя функция выдает ошибку

"ZeroDivisionError: division by zero".

Вот мой код для справки и простые текстовые образцы

text= "Centre to position, remaining shift is still larger than maximum (retry nbr=1, centring_stroke.r=2.7662e-05, max centring stroke.r=2.5e-05)"
text2= "DEACTIVATE: KU-1421"

строка импорта

def count_punct(text):
    count = sum([1 for char in text if char in string.punctuation])
    return round(count/(len(text) - text.count("  ")), 3)*100
df_sub['punct%'] = df_sub['Err_Text2'].apply(lambda x: count_punct(x))
df_sub.head(20)

1 Ответ

0 голосов
/ 14 ноября 2018

Здесь, внесите эти небольшие изменения, и ваша функция count_punct должна быть запущена и запущена .. Причина, по которой ваш код ломался, в том, что вы проверяли ___ вместо _. т.е. 3 последовательных пробела вместо одного пробела. Вот почему разница всегда приводила к одному и тому же значению.

import string
def count_punct(text):
    if text.strip() == "": # To take of care of all space input
        return 0
    count = sum([1 if char in string.punctuation else 0 for char in text ])
    spaces = text.count(" ") # Your error is here, Only check for 1 space instead of 3 spaces
    total_chars = len(text) - spaces

    return round(count / total_chars, 3)*100

text= "DEACTIVATE: OK"

print(count_punct(text))

Выходы:

7.7

И для нулевого деления по ошибке. Это логическая ошибка, когда total_chars равно 0, потому что length строки и number of spaces оба равны. Следовательно, разница равна 0.

Чтобы это исправить, вы можете просто добавить оператор if (уже добавленный выше)

if text.strip() == "":
    print(0)
...