7

Flesch-Kincaid Readability Score を関数として実装するために、次の PHP コードを作成しました。

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;
}

コードを改善するための提案はありますか? それが正しいか?それはうまくいきますか?

あなたが私を助けてくれることを願っています。前もって感謝します!

4

4 に答える 4

16

ヒューリスティックに関する限り、コードは問題ないように見えます。計算が必要な項目を機械で計算するのが非常に難しくなるいくつかの点を次に示します。

  1. 文とは何ですか?

    真剣に、文とは何ですか?ピリオドはありますが、YMCA などの Ph.D. やその他の文末以外の目的にも使用できます。感嘆符、疑問符、および省略記号について考えるとき、ピリオドでうまくいくと思い込むことは、実際には自分自身を損なっていることになります。私は以前にこの問題を見てきました.実際のテキストでより信頼性の高い文のカウントが本当に必要な場合は、テキストを解析する必要があります. これは、計算量が多く、時間がかかり、無料のリソースを見つけるのが難しい場合があります。最終的には、特定のパーサー実装のエラー率について心配する必要があります。ただし、文とは何か、ピリオドの他の多くの用途は何かを知るには、完全な解析のみが必要です。さらに、HTML などのテキストを「そのまま」使用している場合は、また、句読点ではなくタグで終わる文についても心配する必要があります。たとえば、多くのサイトでは h1 タグと h2 タグに句読点を追加していませんが、これらは明らかに異なる文またはフレーズです。

  2. 音節は近似すべきものではない

    これは、この可読性ヒューリスティックの主要な特徴であり、実装が最も困難な理由の 1 つです。作品の音節数の計算分析には、想定される読者が、音節数ジェネレーターが訓練されているものと同じ方言で話すという仮定が必要です。音が音節の周りにどのように収まるかは、実際にアクセントをアクセントにする主要な部分です. 信じられないなら、いつかジャマイカに行ってみてください。これが何を意味するかというと、人間がこれを手で計算したとしても、方言固有のスコアになるということです。

  3. 言葉とは?

    少しでも心理言語学を誇張するつもりはありませんが、スペースで区切られた単語と、話者にとって単語として概念化されているものとはまったく異なることがわかります。これにより、計算可能な可読性スコアの概念がやや疑わしいものになります。

最後に、「うまくいきますか」というあなたの質問に答えることができます。考えられる付加価値を提供するために、テキストの一部を取り、この可読性スコアを他の指標とともに表示しようとしている場合、目の肥えたユーザーはこれらすべての質問を持ち出すことはありません。あなたが何か科学的なこと、あるいは教育的なことをしようとしているのなら (このスコアとそれに類するものは最終的に意図されていたので)、私は本当に気にしません. 実際、これを使用して、ユーザーが生成したコンテンツについて何らかの提案をユーザーに行う場合、私は非常に躊躇します。

テキストの読みにくさを測定するより良い方法は、テキスト内のhapax legomenaの数とともに、頻度の低い単語と頻度の高い単語の比率と関係がある可能性が高いでしょう。しかし、このようなヒューリスティックを実際に考え出すことは追求しません。そのようなものを経験的にテストすることは非常に難しいからです。

于 2009-07-02T22:14:18.403 に答える
8

GitHubのPHP Text Statisticsクラスを見てください。

于 2009-09-07T04:47:30.950 に答える
0

実際、そのコードに問題はありません。もちろん、すべての異なる関数を 1 つのカウント ループに置き換えることによって、少し最適化することもできます。しかし、それは必要ではなく、完全に間違っていると強く主張したいと思います。あなたの現在のコードは非常に読みやすく、理解しやすいものであり、最適化を行うと、その観点からするとおそらく状況が悪化するでしょう。そのまま使用し、実際にパフォーマンスのボトルネックであることが判明しない限り、最適化しようとしないでください。

于 2009-07-02T21:51:34.737 に答える