您的位置:首页 > 其它

Flesch Reading Ease 模拟

2017-01-12 09:52 489 查看
Flesch Reading Ease

Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 2283 Accepted: 718
Description

Flesch Reading Ease, a readability test named after its deviser Rudolf Flesch, is among most ubiquitously used readability tests, which are principally employed for assessment of the difficulty to understand a reading passage written in English. The Flesch
Reading Ease score of a passage relies solely on three statistics, namely the total numbers of sentences, words and syllables, of the passage. Specifically, the score is defined by the following formula:


.
As can be inferred from the above formula, a passage with a high Flesch Reading Ease score tends to favor shorter sentences and words, which is in compliance with commonsense in spite of partial accuracy. (Think of, for instance, the word "television". Long
as it may seem, it is indeed one of the first words that any individual who studies English learns.) A related Wikipedia entry on Flesch Reading Ease [1] suggests that passages scoring 90~100 are comprehensible for an average American 5th grader, and 8th and
9th graders possess the ability to follow passages with a score in the range of 60~70, whereas passages not exceeding 30 in the score are best suitable for college graduates. The text of this problem, all sections taken into account, scores roughly 50 as per
the calculation of Google Documents.

Despite the simplicity in its ideas, several aspects of its definition remains vague for any real-world implementation of Flesch Reading Ease. For the sake of precision and uniformity, the following restrictions adapted from [2] are adopted for this problem,
to which you are to write a solution that effectively computes the Flesch Reading Ease score of a given passage of English text.

Periods, explanation points, colons and semicolons serve as sentence delimiters.
Each group of continuous non-blank characters with beginning and ending punctuation removed counts as a word.
Each vowel (one of a, e, i, o, u and y) in a word is considered one syllable subject to that
-es, -ed and -e (except -le) endings are ignored,
words of three letters or shorter count as single syllables,
consecutive vowels count as one syllable.

References

Wikipedia contributors. Flesch-Kincaid Readability Test. Wikipedia, The Free Encyclopedia. August 30, 2007, 01:57 UTC. Available at: http://en.wikipedia.org/w/index.php?title=Flesch-Kincaid_Readability_Test&oldid=154509512.
Accessed September 5, 2007.
Talburt, J. 1985. The Flesch index: An easily programmable readability analysis algorithm. In Proceedings of the 4th Annual international Conference on Systems Documentation. SIGDOC '85. ACM Press, New York, NY, 114-122.

Input

The input contains a passage in English whose Flesch Reading Ease score is to be computed. Only letters of the English alphabet (both lowercase and uppercase), common punctuation marks (periods, question and exclamation marks, colons, semicolons as well as
commas, quotation marks, hyphens and apostrophes), and spaces appear in the passage. The passage is of indefinite length and possibly occupies multiple lines. Additionally, it is guaranteed to be correct in punctuation. 

Output

Output the Flesch Reading Ease score of the given passage rounded to two digits beyond decimal point. 

Sample Input
Flesch Reading Ease, a readability test named after its deviser Rudolf Flesch,
is among most ubiquitously used readability tests, which are principally
employed for assessment of the difficulty to understand a reading passage
written in English. The Flesch Reading Ease score of a passage relies solely
on three statistics, namely the total numbers of sentences, words and
syllables, of the passage.

Sample Output
26.09

#include<cstring>

#include<cstdio>

#include<iostream>

using namespace std;

int main()

{

  char s[1010];

  double  word=0,stc=0,vow=0;//分别计数的是单词数,句子数,音节数

   while(scanf("%s",s)!=EOF)//使用逐个输入记录

   {

      word++;//每个单词加一

      double q=0;//q用来记录这一段输入完成后,音节数应当增加多少

      int k=strlen(s);

      //int p=k;

      int l=0;//字符的个数

      int n=0;//元音的个数

      //单词后缀为-es、-ed和-e时,后缀的元音字母e不列为音节数计算。

      //但是后缀-le例外,要计算音节数。

      if(s[k-1]=='e'&&s[k-2]!='l')

       s[k-1]='#';

      if( s[k- 2] == 'e'&&(s[k- 1] == 's'||s[k- 1] == 'd'))

        s[k-2]='#';

        for(int i=0;i<=k;i++)

        {

           l++;//字fu数加一

           if(i==k||s[i]=='.'||s[i]==':'||s[i]==','||s[i]==';'||s[i]=='?'||s[i]=='!')

           {

             if(i<k&&s[i]!=',')  stc++;

             //需要注意的是因为是scanf输入,不是一定是每个单词输入,

            // 而是有可能出现 qqq.php.的情况,所以需要判断是否出现分隔

             if(i<k-1) word++;//有逗号分隔,单词加一

             if(l<=3)//当单词总长度<=3时,音节数无条件为1

             {

               q=1,l=0,n=0;

               continue;

             }

             if(s[i-1]=='e'&&s[i-2]!='l')//判断统计音节的准确性

               s[i-1]='#',q--;

               if(s[i-2]=='e'&&(s[i-1]=='s'||s[i-1]=='d'))

               s[i-2]='#',q--;

           }

           if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u'||s[i]=='y'||

           s[i]=='A'||s[i]=='E'||s[i]=='I'||s[i]=='O'||s[i]=='U'||s[i]=='Y')

           //元音字母要判断12个,6个小写,6个大写。

           {

             q++,n++;

             if(n>=2) q=q-n+1;

             //当单词总长度>3时,单词中每出现一个元音字母

             //(a、e、i、o、u、y),音节数+1,但是连续的元音字母只按1个音节计算

             else

             continue;

           }

          n=0;

        }

        vow+=q;

   }

   printf("%.2f\n",206.835-1.015*word/stc-84.6*vow/word);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: