Главная » Frontend » Определение хронометража рекламного текста
2018/04/09Метки:

Определение хронометража рекламного текста

В своей работе пришлось столкнуться с написанием калькулятора по определению хронометража рекламного текста (хрономера) с возможностью выбора темпа начитки. Предназначен для он для вычисления времени, которое диктор затратит на произнесение написанного текста. То есть, другими словами, это средство перевода текстовой строки в секунды.

Во многих расчетах придерживаются формулы, согласно которой на проговаривание одного слова уходит две секунды. Однако, данный способ расчета является сильно усредненным.

Ниже расположенный алгоритм базируется на использовании в расчете:

  • количество символов в строковой последовательности,
  • темпа произношения,
  • перевод цифрового значения в текстовое.

Приведем html-код формы ввода текста:

<form action="#" id="form">
	<textarea rows="10" class="form-control" cols="100" name="text" id="text" placeholder="Вставьте ваш текст" style="resize: none"></textarea>
	<div class="help-block">Удалите из текста все лишнее: комментарии, заметки и так далее.</div>
	<br>
	
	Темп начитки:
	
	<div class="radio">
		<label><input class="radio" type="radio" value="1" name="temp" checked="checked"> Медленно</label>
	</div>
	
	<div class="radio">
		<label><input class="radio" type="radio" value="2" name="temp" > Оптимально</label>
	</div>
	
	<div class="radio">
		<label><input class="radio" type="radio" value="3" name="temp"> Быстро</label>
	</div>
	
	<br>
	
	<div >Хронометраж Вашего текста: <span id="time">0 сек.</span></div>
	<p>Знаков: <span id="cnt">0</span> / Слов: <span id="wrd">0</span></p>		
</form>

Приведем javascript-код самого калькулятор хронометража текста:

/* функция  навешивания события на texarea */
/* по отлавливанию ввода кнопок на клавиатуре */
(function($){$.fn.extend({donetyping:function(callback,timeout){timeout=timeout||200;var timeoutReference,doneTyping=function(el){if(!timeoutReference) return;timeoutReference=null;callback.call(el);};return this.each(function(i,el){var $el = $(el);$el.is(':input')&&$el.on('keyup keypress paste',function(e){if (timeoutReference) clearTimeout(timeoutReference);timeoutReference=setTimeout(function(){doneTyping(el);}, timeout);}).on('blur',function(){doneTyping(el);});});}});})(jQuery);


/* функция  подсчета количества слов в строке */
function countWordsString(string)
{
	var counter=0;
	string=string.replace(/[\s]+/gim,' ');
	string.replace(/(\s+)/g,function(a){counter++;});
	return counter;
}


/* функция  перевода цифр в текст */
function sprop(r)
{
	var a=["","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"],w=["","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"],i=["","один","два","три","четыре","пять","шесть","семь","восемь","девять","десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"];
	
	raw=r.split("");
	for(var n=0,o=0,p=0,t=0;t<100;t++)n=3*t,+raw[n+2],o=+raw[n],raw[n]=a[o],(o=+raw[n+1])>1&&(raw[n+1]=w[o],o=0),p=10*o+ +raw[n+2],isNaN(raw[n+1])||(raw[n+1]=""),raw[n+2]=i[p];
	
	return r=(r=raw.join(" ")).replace(/ +/g," ").trim();
}
	
	
	
$(document).ready(function()
{

	$(window).load(function()
	{
		/* навешиваем событие на textarea и форму */
		$("textarea[name=text]","form").donetyping(function(){$("#form").submit()});
		
		/* навешиваем событие на радио кнопки, задающие темп */
		$("input[name=temp]").on("change",function(){$("#form").submit()});
		$("input[name=temp]").trigger("change");
	});

	/* кнопка сброса */
	$("#reset").click(function()
	{
		$("#cnt").text('0');
		$("#wrd").text('0');
		$("#time").text("0 сек.");
	});
	
	
	/* обработка текста по формуле */
	$("#form").submit(function()
	{
		var t,e,n = $("#text").val();
		var r = $(this).find("input[name=temp]:checked").val();
		if(e=/\D+/gi,t=n.replace(e,""),n&&r)
		{
			var a=sprop(t),s=a.replace(/\s/gi,"").length;
			var p=countWordsString(a),i=n.replace(/\s/gi,"").length;
			var c=countWordsString(n),I="";
			
			if(r == 1)
			{
				if(parseInt(((i+s)/14+(c+p)/2)/2*1.05) == parseInt(((i+s)/13+(c+p)/2)/2*1.05))
				{
					I = parseInt(1.05*Math.ceil((i+s)/14))+" сек.";
				}
				else
				{
					I = parseInt(((i+s)/14+(c+p)/2)/2*1.05)+"-"+parseInt(((i+s)/13+(c+p)/2)/2*1.05)+" сек.";
				}
			}
			else if(r == 3)
			{
				if(parseInt(((i+s)/14+(c+p)/2)/2*.95) == parseInt(((i+s)/13+(c+p)/2)/2*.95))
				{
					I = parseInt((i+s)/14*.95)+" сек.";
				}
				else
				{
					I = parseInt(((i+s)/14+(c+p)/2)/2*.95)+"-"+parseInt(((i+s)/13+(c+p)/2)/2*.95)+" сек.";
				}
			}
			else if (r == 2)
			{
				if(parseInt(((i+s)/14+(c+p)/2)/2) == parseInt(((i+s)/13+(c+p)/2)/2))
				{
					I = Math.ceil((i+s)/14)+" сек.";
				}
				else
				{
					I = parseInt(((i+s)/14+(c+p)/2)/2)+"-"+parseInt(((i+s)/13+(c+p)/2)/2)+" сек.";
				}
			}
			
			$("#cnt").text(i+s);
			$("#wrd").text(c+p);
			$("#time").text(I);
		}
		
		return false;
	});

});

 

Метки: Метки:
Понравилась статья? — Ставь лайк!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

×
Новости и обзор новинок рынка строительной техники.
Подпишитесь на обновления нашей группы!