kongou-ae/redpen-validator

View on GitHub
use-hiragana-and-kanji-properly-v2.js

Summary

Maintainability
B
6 hrs
Test Coverage
function validateSentence(sentence) {

    var terms = [
        /* // sample
        {
            'pattern':'考えられる',
            'message':'断定を避ける表現です。断定系を使ってください。',
            'tokens':[
                {
                    'tags0':'動詞',
                    'tags1':'自立',
                    'tags6':'考える'
                },
                {
                    'tags0':'動詞',
                    'tags1':'接尾',
                    'tags6':'られる'
                }
            ]
        },
        {
            'pattern':'ではないだろうか',
            'message':'断定を避ける表現です。断定系を使ってください。',
        }
        */
        {
            "patern": "上で",
            'message':'「上で」を「うえで」に修正してください。',
            "tokens": [
                {
                    "tags0": "名詞",
                    "tags1": "非自立",
                    "tags6": "上"
                },
                {
                    "tags0": "助詞",
                    "tags1": "格助詞",
                    "tags6": "で"
                }
            ]
        }
    ];

    var validateRegex = function(sentence,terms){
        var regex = new RegExp( terms.pattern );
        if ( regex.test(sentence) ) {
            return 'error';
        }
    }

    var validateToken = function(sentence,terms){

        var result = 0;
        for (var i = 0; i < sentence.tokens.length; i++) {
            // 検査できる=今のTokenの位置+検査すべきTokenの数が検査すべきTokenの長さよりも小さい
            if ( i + terms.tokens.length - 1 < sentence.tokens.length ){
                // 判定用変数を初期化
                result = 0
                for (var j = 0; j < terms.tokens.length; j++){
                    if (
                        sentence.tokens[i+j].tags[0] === terms.tokens[j].tags0 &&
                        sentence.tokens[i+j].tags[1] === terms.tokens[j].tags1 &&
                        sentence.tokens[i+j].tags[6] === terms.tokens[j].tags6
                    ){
                        result++;
                    }
                }
                if (result === terms.tokens.length){
                    return 'error';
                }
            }
        }

    }

    var error = ''
    for (var j = 0; j < terms.length; j++) {
        if ( !terms[j].hasOwnProperty('tokens') ){
            error = validateRegex(sentence,terms[j]);
        }

        if ( terms[j].hasOwnProperty('tokens') ){
            error = validateToken(sentence,terms[j]);
        }

        if ( error ){
            addError( '「' + terms[j].pattern + '」は' + terms[j].message, sentence);
        }
    }
}