用Python计算字符串中标点符号的百分比

用Python计算字符串中标点符号的百分比,python,percentage,punctuation,Python,Percentage,Punctuation,我一直在计算句子中标点符号的百分比。出于某种原因,我的函数在执行双间距时起作用,但计算所有字符和空白。例如,我有一个文本DEACTIVATE:OK,所以当我减去标点符号时,总长度是14,然后长度是13,所以百分比应该是1/13=7.63%,但是,我的函数给了我7.14%,基本上是1/14=7.14% 另一方面,如果只有一个空格,我的函数会抛出一个错误 “ZeroDivisionError:被零除”。 这里是我的代码供大家参考和简单的文字示例 text= "Centre to position,

我一直在计算句子中标点符号的百分比。出于某种原因,我的函数在执行双间距时起作用,但计算所有字符和空白。例如,我有一个文本
DEACTIVATE:OK
,所以当我减去标点符号时,总长度是14,然后长度是13,所以百分比应该是
1/13=7.63%
,但是,我的函数给了我7.14%,基本上是
1/14=7.14%

另一方面,如果只有一个空格,我的函数会抛出一个错误

“ZeroDivisionError:被零除”。

这里是我的代码供大家参考和简单的文字示例

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)

在这里,进行这些小更改,您的
count\u punct
功能应该启动并运行。。您的代码被破坏的原因是您正在检查
\uuuuuuuuu
而不是
\uuuuu
。i、 e 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
对于零除以误差。当总字符数为0时,这是一个逻辑错误,因为字符串的
长度
空格数
都相等。因此差值为0

要解决此问题,只需添加一条if语句(已在上面添加)


上面的代码有两个空格(text.count(“”)。我得到的错误代码是单空格(text.count(“”)。这不是百分比的工作方式。你没有减去标点符号的数量,只是
(标点符号的数量)/(字符串的长度)
,除非你的意思是减去空格,而不是标点符号。你的意思是“返回回合((计数)/(len(text)-text.count(“”),3)*100”?我还是有同样的错误。你的错误是被零除?这意味着您传入了一些字符串,这些字符串要么是完全空格,要么是空的。这是我无法理解的。任何建议或建议都将不胜感激。请注意,OP注释了引号“上面的代码有两个空格(text.count(“”)。我得到的错误代码是单空格(text.count(“”)”。“但关于零除,您是对的。@Tomothy32我没有得到任何单空格错误。”。结果总是一致的。他为什么还要检查双空格?我想说的是OP知道他们不小心使用了多个空格,他们只是没有编辑帖子。(您的答案没有问题,很抱歉有任何混淆。)非常感谢,它现在可以工作了,百分比是正确的。@Vishwas接受答案,如果它有助于将其标记为已解决,谢谢:)
if text.strip() == "":
    print(0)