Word size depends on frequency

Word size depends on frequency

by yiiBoy

HTML

<textarea id="textInput" placeholder="Введите текст здесь..."></textarea>
<button onclick="processText()">Обработать текст</button>
<div id="result"></div>

CSS

#result span {
    margin: 0 4px;
}

JavaScript

function processText() {
    var minFontSize = 14; // Минимальный размер шрифта для слов, встречающихся один раз
    var maxFontSize = 50; // Максимально возможный размер шрифта
    var text = document.getElementById('textInput').value;
    var lines = text.split('\n'); // Разделение текста на строки
    var wordCount = {}; // Общий словарь для подсчёта частоты слов во всём тексте
    var latinWords = {}, otherWords = {};
    var resultHTML = '';

    // Сначала подсчитываем частоту всех слов в тексте
    lines.forEach(function(line) {
        var parts = line.match(/[^\s]+|\s+/g) || []; // Разбиение строки на части, включая пробелы и знаки пунктуации
        parts.forEach(function(part) {
            var word = part.toLowerCase().match(/[a-zA-Zа-яА-Я0-9']+/g);
            if (word) {
                word = word[0];
                if (wordCount.hasOwnProperty(word)) {
                    wordCount[word]++;
                } else {
                    wordCount[word] = 1;
                }

                // Разделяем слова на латинские и нелатинские
                if (/^[a-zA-Z']+$/.test(word)) {
                    if (latinWords.hasOwnProperty(word)) {
                        latinWords[word]++;
                    } else {
                        latinWords[word] = 1;
                    }
                } else {
                    if (otherWords.hasOwnProperty(word)) {
                        otherWords[word]++;
                    } else {
                        otherWords[word] = 1;
                    }
                }
            }
        });
    });

    var maxFrequency = Math.max(...Object.values(wordCount), 1); // Определение максимальной частоты

    // Теперь выводим текст с учётом рассчитанных размеров шрифта для слов
    lines.forEach(function(line) {
        var parts = line.match(/[^\s]+|\s+/g) || [];
        parts.forEach(function(part) {
            var word = part.toLowerCase().match(/[a-zA-Zа-яА-Я0-9']+/g);
            if (word) {
 ...