计算 excel 值的 Gunning-Fog 分数

Calculate Gunning-Fog score on excel values

我有一个跨页sheet,其字段包含正文。

我想计算每一行的 Gunning-Fog 分数,并将值作为新列输出到同一个 excel 文件。为此,我首先需要计算每一行的分数。如果我将文本硬键入 df 变量,则下面的代码有效。但是,当我在 sheet(即 rfds)中定义字段并将其传递给我的 r 变量时,它不起作用。我收到以下错误,但我正在测试的两个字段分别包含 3,896 和 4,843 个单词。

readability.exceptions.ReadabilityException: 100 words required.

我是不是遗漏了什么明显的东西?免责声明,我对 python 和一般编码非常陌生!感谢任何帮助。

from readability import Readability
import pandas as pd

df = pd.read_excel(r"C:/Users/name/edgar/test/item1a_sandbox.xls")

rfd = df["Item 1A"]
rfds = rfd.to_string() # to fix "TypeError: expected string or buffer"

r = Readability(rfds)
fog = r.gunning_fog()
print(fog.score)

TL;DR: 您需要传递单元格值,当前正在传递一列单元格。

此行 rfd = df["Item 1A"] returns 对列的引用。 rfd.to_string() 然后生成一个包含长度(列中的行数)或列引用的字符串。这就是抛出 TypeError 的原因——长度和引用都不是字符串。

与其拿一根柱子往下走,不如从另一个方向接近它。取行再拉出列:

for index, row in df.iterrows():
    print(row.iloc[2])

[2] 是列索引。

现在存在单元格标识符,可以将其传递给可读性计算器:

    r = Readability(row.iloc[2])
    fog = r.gunning_fog()
    print(fog.score)

请注意,这些可以合并为一个命令:

    print(Readability(row.iloc[2]).gunning_fog())

这向您展示了如何将命令链接在一起 - 哪种方式更容易取决于您。当您将它赋予 applyapplymap.

之类的内容时,链接很有用

把所有的东西放在一起(一步一步的方式):

from readability import Readability
import pandas as pd
df = pd.read_excel(r"C:/Users/name/edgar/test/item1a_sandbox.xls")

for index, row in df.iterrows():
    r = Readability(row.iloc[2])
    fog = r.gunning_fog()
    print(fog.score)

或者聪明的方法:

from readability import Readability
import pandas as pd
df = pd.read_excel(r"C:/Users/name/edgar/test/item1a_sandbox.xls")

print(df["Item 1A"].apply(lambda x: Readability(x).gunning_fog()))