在本文中,您将学习如何使用 Textstat Python 库从原始文本中提取七个有用的可读性和文本复杂性特征。
我们将讨论的主题包括:
- Textstat 如何量化下游机器学习任务的可读性和文本复杂性。
- 如何在 Python 中计算七个常用的可读性指标。
- 将这些指标用作分类或回归模型的特征时如何解释这些指标。
我们不要再浪费时间了。
为您的下一个机器学习模型提供 7 个可读性功能
图片由编辑提供
介绍
与完全结构化的表格数据不同,准备 机器学习模型的文本数据 通常需要标记化、嵌入或情感分析等任务。虽然这些无疑是有用的特征,但文本的结构复杂性(或其可读性)也可以为分类或回归等预测任务构成令人难以置信的信息特征。
文本统计顾名思义,是一个轻量级且直观的 Python 库,可以帮助您从原始文本中获取统计信息。通过可读性分数,它为模型提供了输入功能,可以帮助区分休闲社交媒体帖子、儿童童话或哲学手稿等。
本文介绍了七个富有洞察力的文本分析示例,可以使用 Textstat 库轻松进行这些示例。
在开始之前,请确保您已安装 Textstat:
虽然此处描述的分析可以扩展到大型文本语料库,但我们将使用由少量标记文本组成的玩具数据集来说明它们。但请记住,对于下游机器学习模型训练和推理,您将需要足够大的数据集来进行训练。
import pandas as pd import textstat # 创建一个包含三个明显不同文本的玩具数据集 data = { ‘Category’: [‘Simple’, ‘Standard’, ‘Complex’], ‘文本’: [
“The cat sat on the mat. It was a sunny day. The dog played outside.”,
“Machine learning algorithms build a model based on sample data, known as training data, to make predictions.”,
“The thermodynamic properties of the system dictate the spontaneous progression of the chemical reaction, contingent upon the activation energy threshold.”
]} df = pd.DataFrame(data) print(“环境设置完毕,数据集准备就绪!”)
|
进口 熊猫 作为 PD 进口 文本统计 # 创建一个包含三个明显不同文本的玩具数据集 数据 = { ‘类别’: [‘Simple’, ‘Standard’, ‘Complex’], ‘文本’: [ “The cat sat on the mat. It was a sunny day. The dog played outside.”, “Machine learning algorithms build a model based on sample data, known as training data, to make predictions.”, “The thermodynamic properties of the system dictate the spontaneous progression of the chemical reaction, contingent upon the activation energy threshold.” ] } df = PD。数据框(数据) 打印(“环境设置和数据集准备就绪!”) |
1. 应用 Flesch 阅读轻松公式
我们将探讨的第一个文本分析指标是 Flesch Reading Ease 公式,它是最早且最广泛使用的量化文本可读性的指标之一。它根据平均句子长度和每个单词的平均音节数来评估文本。虽然它在概念上意味着取 0 – 100 范围内的值(0 表示不可读,100 表示非常容易阅读),但其公式并没有严格限制,如下面的示例所示:
df[‘Flesch_Ease’] = df[‘Text’].apply(textstat.flesch_reading_ease) print(“Flesch 阅读轻松分数:”) print(df[[‘Category’, ‘Flesch_Ease’]])
|
df[‘Flesch_Ease’] = df[‘Text’]。申请(文本统计。弗莱施_阅读_轻松) 打印(“Flesch 阅读轻松度分数:”) 打印(df[[‘Category’, ‘Flesch_Ease’]]) |
输出:
Flesch 阅读轻松度分数:类别 Flesch_Ease 0 简单 105.880000 1 标准 45.262353 2 复杂 -8.045000
|
肉 阅读 舒适 分数: 类别 肉_舒适 0 简单的 105.880000 1 标准 45.262353 2 复杂的 –8.045000 |
实际的公式是这样的:
$$ 206.835 – 1.015 \left( \frac{\text{总单词数}}{\text{总句子}} \right) – 84.6 \left( \frac{\text{总音节}}{\text{总单词数}} \right) $$
像 Flesch Reading Ease 这样的无界公式可能会阻碍机器学习模型的正确训练,这是在后续特征工程任务中需要考虑的因素。
2. 计算 Flesch-Kincaid 年级
与提供单一可读性值的阅读轻松度分数不同,Flesch-Kincaid 年级使用类似于美国学校年级水平的量表来评估文本复杂性。在这种情况下,值越高表示复杂性越高。但请注意:该指标的行为也与 Flesch Reading Ease 分数类似,因此极其简单或复杂的文本可能会分别产生低于零或任意高值的分数。
df[‘Flesch_Grade’] = df[‘Text’].apply(textstat.flesch_kincaid_grade) print(“Flesch-Kincaid 等级:”) print(df[[‘Category’, ‘Flesch_Grade’]])
|
df[‘Flesch_Grade’] = df[‘Text’]。申请(文本统计。肉体_kincaid_等级) 打印(“Flesch-Kincaid 年级:”) 打印(df[[‘Category’, ‘Flesch_Grade’]]) |
输出:
Flesch-Kincaid 年级:类别 Flesch_Grade 0 简单 -0.266667 1 标准 11.169412 2 复杂 19.350000
|
肉–金凯德 年级 级别: 类别 肉_年级 0 简单的 –0.266667 1 标准 11.169412 2 复杂的 19.350000 |
3. 计算烟雾指数
另一个起源于评估文本复杂性的指标是 SMOG 指数,它估计理解文本所需的正规教育年限。这个公式比其他公式更受限制,因为它有一个略高于 3 的严格数学下限。我们的三个示例文本中最简单的一个在复杂性方面处于该度量的绝对最小值。它考虑了多音节词(即具有三个或更多音节的词)的数量等因素。
df[‘SMOG_Index’] = df[‘Text’].apply(textstat.smog_index) print(“烟雾指数得分:”) print(df[[‘Category’, ‘SMOG_Index’]])
|
df[‘SMOG_Index’] = df[‘Text’]。申请(文本统计。烟雾指数) 打印(“烟雾指数得分:”) 打印(df[[‘Category’, ‘SMOG_Index’]]) |
输出:
SMOG 指数分数:类别 SMOG_Index 0 简单 3.129100 1 标准 11.208143 2 复杂 20.267339
|
烟雾 指数 分数: 类别 烟雾_指数 0 简单的 3.129100 1 标准 11.208143 2 复杂的 20.267339 |
4. 计算喷雾指数
与烟雾指数一样,冈宁雾指数也有严格的下限,在本例中等于零。原因很简单:它量化了复杂单词的百分比以及平均句子长度。它是一种流行的指标,用于分析商业文本并确保更广泛的受众可以访问技术或特定领域的内容。
df[‘Gunning_Fog’] = df[‘Text’].apply(textstat.gunning_fog) print(“甘宁雾指数:”) print(df[[‘Category’, ‘Gunning_Fog’]])
|
df[‘Gunning_Fog’] = df[‘Text’]。申请(文本统计。喷枪_雾) 打印(“炮宁雾指数:”) 打印(df[[‘Category’, ‘Gunning_Fog’]]) |
输出:
喷枪雾指数:类别 Gunning_Fog 0 简单 2.000000 1 标准 11.505882 2 复杂 26.000000
|
枪炮 多雾路段 指数: 类别 枪炮_多雾路段 0 简单的 2.000000 1 标准 11.505882 2 复杂的 26.000000 |
5. 计算自动可读性指数
前面看到的公式考虑了单词中的音节数。相比之下,自动可读性指数 (ARI) 根据每个单词的字符数计算年级。这使得它的计算速度更快,因此在处理大型文本数据集或实时分析流数据时是更好的选择。它是无界的,因此在计算它之后通常建议进行特征缩放。
# 计算自动可读性指数 df[‘ARI’] = df[‘Text’].apply(textstat.automated_readability_index) print(“自动可读性索引:”) print(df[[‘Category’, ‘ARI’]])
|
# 计算自动可读性指数 df[‘ARI’] = df[‘Text’]。申请(文本统计。自动可读性索引) 打印(“自动可读性指数:”) 打印(df[[‘Category’, ‘ARI’]]) |
输出:
自动可读性索引:类别 ARI 0 简单 -2.288000 1 标准 12.559412 2 复杂 20.127000
|
自动化 可读性 指数: 类别 阿里 0 简单的 –2.288000 1 标准 12.559412 2 复杂的 20.127000 |
6. 计算 Dale-Chall 可读性分数
与 Gunning Fog Index 类似,Dale-Chall 可读性分数的下限严格为零,因为该指标也依赖于比率和百分比。该指标的显着特征是其词汇驱动的方法,因为它的工作原理是根据预先构建的查找列表交叉引用整个文本,该列表包含数千个四年级学生熟悉的单词。任何未包含在该列表中的单词都被标记为复杂单词。如果您想分析面向儿童或广大受众的文本,此指标可能是一个很好的参考点。
df[‘Dale_Chall’] = df[‘Text’].apply(textstat.dale_chall_readability_score) print(“Dale-Chall 分数:”) print(df[[‘Category’, ‘Dale_Chall’]])
|
df[‘Dale_Chall’] = df[‘Text’]。申请(文本统计。dale_chall_readability_score) 打印(“戴尔-查尔得分:”) 打印(df[[‘Category’, ‘Dale_Chall’]]) |
输出:
Dale-Chall 分数:类别 Dale_Chall 0 简单 4.937167 1 标准 12.839112 2 复杂 14.102500
|
戴尔–丢失的 分数: 类别 戴尔_丢失的 0 简单的 4.937167 1 标准 12.839112 2 复杂的 14.102500 |
7. 使用文本标准作为共识指标
如果您不确定使用哪个特定公式会怎样? textstat 提供了一个可解释的共识指标,将其中的几个指标结合在一起。通过 text_standard() 函数,多种可读性方法应用于文本,返回一致的等级水平。与大多数指标一样,值越高,可读性越低。这是将快速、平衡的摘要功能合并到下游建模任务中的绝佳选择。
df[‘Consensus_Grade’] = df[‘Text’].apply(lambda x: textstat.text_standard(x, float_output=True)) print(“共识等级:”) print(df[[‘Category’, ‘Consensus_Grade’]])
|
df[‘Consensus_Grade’] = df[‘Text’]。申请(拉姆达 x: 文本统计。文本_标准(x, 浮动输出=真的)) 打印(“共识等级:”) 打印(df[[‘Category’, ‘Consensus_Grade’]]) |
输出:
共识等级:类别 Consensus_Grade 0 简单 2.0 1 标准 11.0 2 复杂 18.0
|
共识 年级 级别: 类别 共识_年级 0 简单的 2.0 1 标准 11.0 2 复杂的 18.0 |
总结
我们使用 Python 库 Textstat 探索了七个用于分析文本可读性或复杂性的指标。虽然大多数这些方法的行为有些相似,但了解它们的细微差别特征和独特行为是为您的分析或后续机器学习建模用例选择正确方法的关键。

