我编写了以下PHP代码以将Flesch-Kincaid可读性得分实现为一个函数:
function readability($text) {
$total_sentences = 1; // one full stop = two sentences => start with 1
$punctuation_marks = array('.', '?', '!', ':');
foreach ($punctuation_marks as $punctuation_mark) {
$total_sentences += substr_count($text, $punctuation_mark);
}
$total_words = str_word_count($text);
$total_syllable = 3; // assuming this value since I don't know how to count them
$score = 206.835-(1.015*$total_words/$total_sentences)-(84.6*$total_syllables/$total_words);
return $score;
}
您对如何改进代码有建议吗?这是正确的吗?能行吗
我希望你能帮助我。提前致谢!
最佳答案
就启发式而言,代码看起来还不错。以下是要考虑的一些要点,这些要点使机器需要计算的项目相当困难:
说真的,什么是句子?我们有句号,但是它们也可以用于博士学位,例如Y.M.C.A.和其他非句子定论的目的。当考虑到感叹号,问号和省略号时,您实际上会因假设句号可以解决问题而对自己造成伤害。我之前已经看过这个问题,如果您确实想在真实文本中增加句子的可靠性,则需要解析文本。这可能是计算密集型,耗时的,并且很难找到可用的免费资源。最后,您仍然必须担心特定解析器实现的错误率。但是,只有完整的分析才能告诉您什么是句子,什么只是句点的其他用途。此外,如果您使用的是“野外”文本(例如HTML),那么您还必须担心句子的结尾不是标点符号而是标签结尾。例如,许多网站没有在h1和h2标签中添加标点符号,但是它们显然是不同的句子或短语。
这是这种可读性启发式方法的主要标志,也是使其最难实现的标志。对作品中的音节计数进行计算分析时,需要假设假定的读者所讲的语言与培训您的音节计数发生器所用的语言是同一方言。声音如何围绕音节下降实际上是使重音变调的主要部分。如果您不相信我,请尝试访问牙买加。这意味着即使一个人手动进行计算,它仍然是方言特定的分数。
不要丝毫地对待心理语言,但您会发现,以空格分隔的单词和被概念化为说话者的单词完全不同。这将使可计算的可读性分数的概念有些可疑。
因此,最后,我可以回答您的“行之有效”的问题。如果您希望阅读一段文字并在其他度量标准中显示此可读性评分,以提供某种可能的附加值,那么有眼光的用户将不会提出所有这些问题。如果您要尝试做一些科学的事情,甚至是做一些教学上的事情(因为这个分数和类似的分数最终是要达到目的的),我都不会打扰。实际上,如果您打算使用它为用户提供有关他们生成的内容的任何建议,我将非常犹豫。
衡量文本阅读难度的更好方法是,与低频单词与高频单词的比率以及文本中hapax legomena的数量有关。但是我实际上不会提出这样的启发式方法,因为对这样的事物进行实证测试将非常困难。
关于php - Flesch-Kincaid可读性: Improve PHP function,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1076802/