yoastseo
Version:
Yoast client-side content analysis
72 lines (64 loc) • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = checkIfWordIsComplex;
var _quotes = require("../../../helpers/sanitize/quotes");
const contractionPrefixes = "^(c'|d'|l'|s')";
const contractionRegex = new RegExp(contractionPrefixes);
/**
* Checks if a word is complex.
* This is a helper for the Word Complexity assessment. As such, this helper is not bundled in Yoast SEO.
*
* @param {object} config The configuration needed for assessing the word's complexity, e.g., the frequency list.
* @param {string} word The word to check.
* @param {object} premiumData The object that contains data for the assessment including the frequency list.
*
* @returns {boolean} Whether or not a word is complex.
*/
function checkIfWordIsComplex(config, word, premiumData) {
const lengthLimit = config.wordLength;
const frequencyList = premiumData.frequencyList.list;
// Normalize single quotes before checking for contractions.
word = (0, _quotes.normalizeSingle)(word);
/*
* We want to remove the definite article l', preposition d' from a word,
* since an article or preposition doesn't add any complexity to the word.
*/
if (contractionRegex.test(word)) {
word = word.replace(contractionRegex, "");
}
// The word is not complex if it's less than or the same as the length limit, i.e. 9 characters for French.
if (word.length <= lengthLimit) {
return false;
}
// The word is not complex if it's in the frequency list.
if (frequencyList.includes(word)) {
return false;
}
/*
* In French where capital letter beginning decreases the complexity of a word,
* word longer than 9 characters is not complex if it starts with capital letter.
*/
if (word[0].toLowerCase() === word[0]) {
const standardSPluralSuffixesRegex = new RegExp(premiumData.suffixGroupsComplexity.standardSuffixesWithSplural);
const standardXPluralSuffixesRegex = new RegExp(premiumData.suffixGroupsComplexity.standardSuffixesWithXplural);
const irregularPluralSingularSuffixes = premiumData.suffixGroupsComplexity.irregularPluralSingularSuffixes;
const irregularPluralSuffixRegex = new RegExp(irregularPluralSingularSuffixes[0]);
/*
* If a word is longer than 9 characters and doesn't start with capital letter,
* we check further whether it is a plural that ends on the -s or -x plural suffix. If it is, we remove the plural suffix
* and check if the singular word can be found in the frequency list.
* if it is a plural that does not end on -s or -x but on -aux, we replace the plural -aux suffix with the singular suffix -al.
* The word is not complex if the singular form is in the list.
*/
if (standardSPluralSuffixesRegex.test(word) || standardXPluralSuffixesRegex.test(word)) {
word = word.substring(0, word.length - 1);
} else if (irregularPluralSuffixRegex.test(word)) {
word = word.replace(irregularPluralSuffixRegex, irregularPluralSingularSuffixes[1]);
}
return !frequencyList.includes(word);
}
return false;
}
//# sourceMappingURL=checkIfWordIsComplex.js.map