Python (NLP) 中的可读性指数?

pythonserver side programmingprogramming

自然语言处理是研究自动生成和理解自然人类语言。随着计算机技术如今融入几乎每个行业,这项任务正变得越来越有趣。我们将研究自然语言处理中的一个特定领域:可读性。这涉及到确定文本可读性的主题。这表明阅读或理解文本有多难。

可读性指数是一个数值,表示阅读和理解文本的难度(或容易程度)。有几种不同的测试可用于确定可读性,它们有不同的使用领域。

"可读性描述了文档可读的难易程度" [13]。存在许多不同的测试 [9] 来计算可读性。可读性测试"被认为是阅读难易度的预测,但并非确定可读性的唯一方法"

有些测试与语言无关,但有些测试更适合某些语言。了解不同的可读性测试对我们来说至关重要。

可读性测试 −
适用于(语言) −
简短描述和公式 −
自动可读性指数 (ARI)
英语
旨在衡量文本的可理解性。输出是理解文本所需的美国年级水平的近似表示。
ARI = 4.71 * (字符/单词)
+ 0.5 * (单词/句子) -21.43

Flesch 阅读难易度

英语
旨在表明阅读段落的理解难度。分数越高,材料越容易阅读;数字越低,表示段落越难读。
FRE = 206.835 − 1.015*(总单词数/总句子数) − 84.6 * (总音节数/总单词数)

FleschKincaid 年级
英语
旨在表明阅读段落的理解难度。结果是与美国年级水平相对应的数字。
FKGL = 0.39 * (总单词数/总句子数) + 11.8 (总音节数/总单词数) -15.59

Coleman-Liau 指数
英语
旨在衡量文本的可理解性。输出是理解文本所需的近似美国年级水平。
CLI = (5.89 * (字符/单词)) −
(30 *(句子/单词)) − 15.8

Gunning Fog 指数
英语
用于测量英语写作样本的可读性。由此得出的指数表明一个人需要多少年正规教育(美国等级)才能在第一次阅读时轻松理解文本。
GFI = 0.4 * (( 单词/句子) +
100 * (复杂单词/单词))
线性书写
英语
英语文本可读性指标,由空军开发,帮助他们计算技术手册的可读性。来自维基百科的公式:

  • 从你的写作中找出一个 100 字的样本。

  • 计算简单的单词(定义为两个音节或更少),并在每个单词上放置一个数字"1",甚至包括 a、an、the 和其他简单单词。

  • 计算困难的单词(定义为三个音节或更多),并在每个单词上放置一个数字"3"按照字典中发音的每个单词进行评分。

  • 将简单单词的数量乘以"1"。

  • 将难词的数量乘以"3"。

  • 将前两个数字相加。

  • 将总数除以句子数。

评分指数 (RIX)
西欧语言
这很有用,因为它可以用于任何西欧语言的文档 [3]。输出分数介于 0(非常简单)和 55+(非常困难)之间。
RIX =(长单词/句子)
(长单词 = 字符数 > 6 的单词)
Lesbarhets 索引 (LIX)
西欧语言
这很有用,因为它可以用于任何西欧语言的文档 [2][3]。输出是一个指示年级的索引。指数低于 0.1 为 1 级,7.2 及以上为大学级。
LIX = (总单词数/总句子数) +
(长单词数/总单词数 * 100)
(长单词数 = 字符数 > 6 的单词数)

例如,以下程序通过 Flesch 指数确定文本文件的可读性。

假设 

Flesch 指数
文本文件阅读年级
0-30
大学
50-60
高中
90-100
四年级

从上文中,flesch-kincaid 年级公式用于计算等效年级 G −

FKGL = 0.39 * (总单词数/总句子数) + 11.8 (总音节数/总单词数) -15.59

代码

import os
dire = os.getcwd()
listOfdir = os.listdir(dire)
while True:
   UserFileName = input('Enter file name:')
   if (UserFileName in listOfdir) and (UserFileName.endswith(".txt")):
      InputFile = open(UserFileName,'r')
      text = InputFile.read()
      sentence = text.count('.') + text.count('!') + text.count(';') + text.count(':') + text.count('?')
      words = len(text.split())
      syllable = 0
      for word in text.split():
         for vowel in ['a','e','i','o','u']:
            syllable + = word.count(vowel)
         for ending in ['es','ed','e']:
            if word.endswith(ending):
               syllable - = 1
         if word.endswith('le'):
            syllable + = 1
      G = round((0.39*words)/sentence+ (11.8*syllable)/words-15.59)
      if G > = 0 and G < = 30:
         print ('The Readability level is College')
      elif G > = 50 and G < = 60:
         print ('The Readability level is High School')
      elif G > = 90 and G < = 100:
         print ('The Readability level is fourth grade')
      print ('This text has %d words' %(words))
   elif UserFileName not in listOfdir:
      print ('This text file does not exist in current directory')
   elif not(UserFileName.endswith('.txt')):
      print ('This is not a text file.')

输出

Enter file name:dataVisualization.txt
The Readability level is College
This text has 64 words

相关文章