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) {
...