# 1.计算单词数
# 2.计算句子数
# 3.计算音节数
# 计算RE值
# RE = 206.835 - (1.015 x ASL) - (84.6 x ASW)
# RE =可读性缓解
# ASL =平均句子长度(即单词数除以句子数)
# ASW =每个单词的平均音节数(即,音节数除以单词数)
import re
import pronouncing
def word_list(filename):
'''返回单词列表'''
try:
with open(filename, 'r', encoding='UTF-8') as f:
content = f.read()
except FileNotFoundError:
errmsg = filename + '文件不存在'
print(errmsg)
else:
word_re = re.compile(r'[^A-Za-z’\']+')
words = word_re.split(content.lower())
return words
def sentence_count(filename):
'''计算句子长度'''
try:
with open(filename, 'r', encoding='UTF-8') as f:
content = f.read()
except FileNotFoundError:
errmsg = filename + '文件不存在'
else:
point_re = re.compile(r'\.')
point = point_re.split(content)
# print('句子长度:' + str(point))
return (len(point))
def get_pronouncing_num(word):
'''计算单词音节数'''
# https://pronouncing.readthedocs.io/en/latest/tutorial.html#counting-syllables
try:
pronunciation_list = pronouncing.phones_for_word(word)
num = pronouncing.syllable_count(pronunciation_list[0])
except Exception as e:
print('计算音节数异常:异常单词:"' + word + '"')
return 1
else:
return num
def get_pronouncing_nums(words):
'''计算文本音节总数'''
counts = 0
for word in words:
counts += get_pronouncing_num(word)
return counts
# 计算RE值
# RE = 206.835 - (1.015 x ASL) - (84.6 x ASW)
# RE =可读性缓解
# ASL =平均句子长度(即单词数除以句子数)
# ASW =每个单词的平均音节数(即,音节数除以单词数)
if __name__ == '__main__':
filename = 'detail.txt'
# 求ASL 单词数/句子数
word_num = len(word_list(filename))
sentence_num = sentence_count(filename)
print(str(word_num) + ',' + str(sentence_num))
ASL = word_num / sentence_num
# 求ASW 音节数/单词数 pronouncing_num/word_num
words = word_list(filename)
print(len(words))
pronouncing_nums = get_pronouncing_nums(words)
ASW = pronouncing_nums / word_num
# 求RE = 206.835 - (1.015 x ASL) - (84.6 x ASW)
RE = 206.835 - (1.015 * ASL) - (84.6 * ASW)
print('ASW:' + str(ASW))
print('ASL:' + str(ASL))
print('RE:' + str(RE))
来源:https://blog.csdn.net/granery/article/details/88912059