Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Разбить текст на фразы и завернуть в тэги (https://javascript.ru/forum/dom-window/56133-razbit-tekst-na-frazy-i-zavernut-v-tehgi.html)

Exhaust_ 31.05.2015 21:25

Разбить текст на фразы и завернуть в тэги
 
Здравствуйте. Нужна помощь знатоков.
Есть html текст с форматированием и разделением на абзацы.
С ним нужно провернуть следующий фокус:
при загрузке страницы каждую группу слов разделенную абзацами и знаками препинания* завернуть в тэги <speakbit></speakbit> с сохранением прежнего форматирования текста, картинок и ссылок в нем.
* значит что нужно сгруппировать слова между знаками препинания, но сами знаки препинания также завернуть в тэги
На худой конец можно разделить на слова, а не на фразы.

Вот пример на котором это должно работать
<html>
<head> 
<meta charset="utf-8">
<script type="text/javascript"> 

???

</script>
</head>
<body>
<h1>Дэвид Вернон: «То, что мы называем искусственным интеллектом, им не является»</h1>
<p><em>Дэвид Вернон — признанный специалист в области создания и изучения искусственного интеллекта, приглашенный профессор <a href="http://university.innopolis.ru/">Университета Иннополис</a>. За последние 36 лет он работал в университетах Ирландии, Швеции, Германии, ОАЭ, а также в Европейском сообществе развития систем искусственного интеллекта. Мы побеседовали с Дэвидом о настоящем и будущем искусственного интеллекта.</em></p>
<p><strong>— Что ученые понимают под искусственным интеллектом?</strong></p>
<p>— У понятия «искусственный интеллект» много объяснений. Одно из старейших дано Алленом Ньюэллом и Гербертом Саймоном, двумя пионерами исследований в этой области, которые в 1975 году написали: «Задача интеллекта заключается в том, чтобы не допустить экспоненциального взрыва при поиске решения проблемы». Они имели в виду, что существует огромное количество в большинстве своем интересных проблем, которые заставляют нас изучить экспоненциально огромное количество их потенциальных решений, чтобы найти то, которое подойдет, в случае если применить к ним метод простого перебора. Лучшим способом избежать этого «взрыва» возможных вариантов решения является интеллектуальный выбор вашей стратегии поиска. С этой точки зрения искусственный интеллект — это наличие такой стратегии у машины, чаще всего у компьютера или у робота, который контролируется компьютером.</p>
</body>
</html>


PS: после этого и еще двух шагов получится букмарклет кроссбраузерная читалка текстов голосом Гугл-переводчика. результатом поделюсь со всеми

Decode 01.06.2015 01:47

Exhaust_, http://api.jquery.com/wrap/

kostyanet 01.06.2015 04:21

Цитата:

Сообщение от Exhaust_
Вот пример на котором это должно работать

Вот он

var foo = 5,
bar=function(baz){return baz+10};


Разница лишь в том, что подсвечиваются слова, а у вас - фразы. Подняв уровень абстракции назовем - токены. Для синтаксиса js токенов много, у вас - 2. Сделав токены по заданным правилам, например регой, натравливаете обычную подсветку.

kostyanet 01.06.2015 04:24

Цитата:

Сообщение от Exhaust_
получится букмарклет кроссбраузерная читалка текстов голосом Гугл

Для инвалидов стараетесь?

Sigizmund2012 01.06.2015 08:24

Цитата:

Сообщение от kostyanet (Сообщение 373356)
Для инвалидов стараетесь?

Очевидно же, что для них. А это что, плохо?

Sigizmund2012 01.06.2015 08:54

Цитата:

Сообщение от Decode (Сообщение 373351)

wrap() не подходит, селектором jQuery фразу не выделить, тут нужна могучая регулярка, которая бы брала по 3-4 слова и останавливалась на знаках препинания. У меня знаний для построения такого регекспа не хватает, будем ждать пока сюда какой-нибудь гуру не ворвётся.

kostyanet 01.06.2015 08:58

Цитата:

Сообщение от Sigizmund2012
Очевидно же, что для них. А это что, плохо?

Плохо делать из людей инвалидов чтоб затем стараться для инвалидов.

kostyanet 01.06.2015 09:04

Цитата:

Сообщение от Sigizmund2012
тут нужна могучая регулярка

Ну я это ляпнул из-за php. В js ваши токены по параграфам уже в DOM'е, а как запятые найти разберетесь.

Sigizmund2012 01.06.2015 09:18

Цитата:

Сообщение от kostyanet (Сообщение 373373)
Плохо делать из людей инвалидов чтоб затем стараться для инвалидов.

А инвалидов что, на специальном заводе делают? Шёл человек, упал, вот тебе инвалид. На зрение же сахарный диабет часто осложнения даёт, глаукома, да много всего.

kostyanet 01.06.2015 11:52

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

Вы что с самом начала не поняли сарказма?

kostyanet 01.06.2015 11:56

Что касается поддержки дивайсов для инвалидов, там все что требуется уже написано, от веб-дизайнера лишь требуется правильно расставить все эти aria теги и особенно в динамической подгрузке профтыкать правильную политику, чтоб человеку в ухо не читали одно и то же с самого начала за небольшим обновлением где-то в конце. У ТС явно какой-то самопал или вроде того.

Exhaust_ 01.06.2015 13:13

Делаю для родственника с дефектом зрения

Первый ответ я так и не понял:
var foo = 5,
bar=function(baz){return baz+10};

Но что если подойти с другой стороны
Сначала завернуть весь текст в <speakbit></speakbit>
а потом поставить после всех знаков препинания </speakbit><speakbit>. Как бы наоборот сделать?

рони 01.06.2015 13:18

Exhaust_,
не могли бы вы написать результат который хотите получить из кода в 1 посте.

Exhaust_ 01.06.2015 13:39

Предполагаемый результат при загрузке код страницы из такого:
<body>
<h1>Дэвид Вернон: «То, что мы называем искусственным интеллектом, им не является»</h1>
<p><em>Дэвид Вернон — признанный специалист в области создания и изучения искусственного интеллекта, приглашенный профессор <a href="http://university.innopolis.ru/">Университета Иннополис</a>. За последние 36 лет он работал в университетах Ирландии, Швеции, Германии, ОАЭ, а также в Европейском сообществе развития систем искусственного интеллекта. Мы побеседовали с Дэвидом о настоящем и будущем искусственного интеллекта.</em></p>
<p><strong>— Что ученые понимают под искусственным интеллектом?</strong></p>
<p>— У понятия «искусственный интеллект» много объяснений. Одно из старейших дано Алленом Ньюэллом и Гербертом Саймоном, двумя пионерами исследований в этой области, которые в 1975 году написали: «Задача интеллекта заключается в том, чтобы не допустить экспоненциального взрыва при поиске решения проблемы». Они имели в виду, что существует огромное количество в большинстве своем интересных проблем, которые заставляют нас изучить экспоненциально огромное количество их потенциальных решений, чтобы найти то, которое подойдет, в случае если применить к ним метод простого перебора. Лучшим способом избежать этого «взрыва» возможных вариантов решения является интеллектуальный выбор вашей стратегии поиска. С этой точки зрения искусственный интеллект — это наличие такой стратегии у машины, чаще всего у компьютера или у робота, который контролируется компьютером.</p>
</body>

стать таким
<body>
<speakbit><h1>Дэвид Вернон:</speakbit><speakbit>«То,</speakbit><speakbit>что мы называем искусственным интеллектом</speakbit><speakbit>им не является»</speakbit><speakbit></h1>
<p><em>Дэвид Вернон —</speakbit><speakbit>признанный специалист в области создания и изучения искусственного интеллекта,</speakbit><speakbit>приглашенный профессор <a href="http://university.innopolis.ru/">Университета Иннополис</a>.</speakbit><speakbit>За последние 36 лет он работал в университетах Ирландии,</speakbit><speakbit>Швеции,</speakbit><speakbit>Германии,</speakbit><speakbit>ОАЭ,</speakbit><speakbit>а также в Европейском сообществе развития систем искусственного интеллекта.</speakbit><speakbit>Мы побеседовали с Дэвидом о настоящем и будущем искусственного интеллекта.</speakbit><speakbit></em></p>
<p><strong>— Что ученые понимают под искусственным интеллектом?</speakbit><speakbit></strong></p>
<p>— У понятия «искусственный интеллект» много объяснений.</speakbit><speakbit>Одно из старейших дано Алленом Ньюэллом и Гербертом Саймоном,</speakbit><speakbit>двумя пионерами исследований в этой области,</speakbit><speakbit>которые в 1975 году написали:</speakbit><speakbit>«Задача интеллекта заключается в том,</speakbit><speakbit>чтобы не допустить экспоненциального взрыва при поиске решения проблемы».</speakbit><speakbit>Они имели в виду,</speakbit><speakbit>что существует огромное количество в большинстве своем интересных проблем,</speakbit><speakbit>которые заставляют нас изучить экспоненциально огромное количество их потенциальных решений,</speakbit><speakbit>чтобы найти то,</speakbit><speakbit>которое подойдет,</speakbit><speakbit>в случае если применить к ним метод простого перебора.</speakbit><speakbit>Лучшим способом избежать этого «взрыва» возможных вариантов решения является интеллектуальный выбор вашей стратегии поиска.</speakbit><speakbit>С этой точки зрения искусственный интеллект —</speakbit><speakbit>это наличие такой стратегии у машины,</speakbit><speakbit>чаще всего у компьютера или у робота,</speakbit><speakbit>который контролируется компьютером.</speakbit><speakbit></p></speakbit>
</body>


фактически после каждого знака препинания и абзаца ставить </speakbit><speakbit>

рони 01.06.2015 14:19

Exhaust_, нажмите на scan внизу текста - увидите разбивку
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script>
 $.fn.highlight = function (b, k) {
     function l() {
         $("." + c.className).each(function (c, e) {
             var a = e.previousSibling,
                 d = e.nextSibling,
                 b = $(e),
                 f = "";
             a && 3 == a.nodeType && (f += a.data, a.parentNode.removeChild(a));
             e.firstChild && (f += e.firstChild.data);
             d && 3 == d.nodeType && (f += d.data, d.parentNode.removeChild(d));
             b.replaceWith(f)
         })
     }

     function h(b) {
         b = b.childNodes;
         for (var e = b.length, a; a = b[--e];)
             if (3 == a.nodeType) {
                 if (!/^\s+$/.test(a.data)) {
                     var d = a.data,
                         d = d.replace(m, '<speakbit class="' + c.className + '">$1</speakbit>');
                     $(a).replaceWith(d)
                 }
             } else 1 == a.nodeType && a.childNodes && (!/(script|style)/i.test(a.tagName) && a.className != c.className) && h(a)
     }
     var c = {
         split: "\\s+",
         className: "highlight",
         caseSensitive: !1,
         strictly: !1,
         remove: !0
     }, c = $.extend(c, k);
     c.remove && l();
     b = $.trim(b);
     var g = c.strictly ? "" : "\\S*";
       //  m = RegExp("(" + g + b.replace(RegExp(c.split, "g"), g + "|" + g) + g + ")", (c.caseSensitive ? "" : "i") + "g");
         m = /(.+?)(?=[-:.,]|$)/g;
     return this.each(function () {
         b && h(this)
     })
 };
 $(function () {
 $('#scan').click(function () {
    $("body h1, body p").highlight("null", {})
    })
 })

 </script>
  <style type="text/css">
speakbit.highlight {color:red; border : 2px solid #000000; display: block;}
  </style>
</head>


  <body>
<h1>Дэвид Вернон: «То, что мы называем искусственным интеллектом, им не является»</h1>
<p><em>Дэвид Вернон — признанный специалист в области создания и изучения искусственного интеллекта, приглашенный профессор <a href="http://university.innopolis.ru/">Университета Иннополис</a>. За последние 36 лет он работал в университетах Ирландии, Швеции, Германии, ОАЭ, а также в Европейском сообществе развития систем искусственного интеллекта. Мы побеседовали с Дэвидом о настоящем и будущем искусственного интеллекта.</em></p>
<p><strong>— Что ученые понимают под искусственным интеллектом?</strong></p>
<p>— У понятия «искусственный интеллект» много объяснений. Одно из старейших дано Алленом Ньюэллом и Гербертом Саймоном, двумя пионерами исследований в этой области, которые в 1975 году написали: «Задача интеллекта заключается в том, чтобы не допустить экспоненциального взрыва при поиске решения проблемы». Они имели в виду, что существует огромное количество в большинстве своем интересных проблем, которые заставляют нас изучить экспоненциально огромное количество их потенциальных решений, чтобы найти то, которое подойдет, в случае если применить к ним метод простого перебора. Лучшим способом избежать этого «взрыва» возможных вариантов решения является интеллектуальный выбор вашей стратегии поиска. С этой точки зрения искусственный интеллект — это наличие такой стратегии у машины, чаще всего у компьютера или у робота, который контролируется компьютером.</p>

<input id="scan" name="" type="button" value="scan">

</body>
</html>

Sigizmund2012 01.06.2015 14:42

Цитата:

Сообщение от рони
рони

Это просто охрененно, вы полностью плагин написали или готовый переделали?

Exhaust_ 01.06.2015 14:47

То что нужно. Огромное спасибо, рони

рони 01.06.2015 14:53

Sigizmund2012,
http://javascript.ru/forum/project/4...-v-tekste.html

Endy 01.06.2015 14:57

:lol:
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Document</title>

    <script>
        window.onload = function() {
            var bodyText = document.body.innerHTML.trim();
            bodyText = bodyText.replace(/(\n)/g, '$1<speakbit></speakbit>');
            bodyText = bodyText.replace(/([,:;—«»!?.“”])/gi, '$1<speakbit></speakbit>');
            document.body.innerHTML = bodyText;
            document.body.appendChild(document.createElement("textarea"))
            document.querySelector("textarea").innerHTML = bodyText;
            document.querySelector("textarea").cols = 120;
            document.querySelector("textarea").rows = 55;
        }
    </script>
</head>

<body>
    <h1>Дэвид Вернон: «То, что мы называем искусственным интеллектом, им не является»</h1>
    <p><em>Дэвид Вернон — признанный специалист в области создания и изучения искусственного интеллекта, приглашенный профессор <a href="http://university.innopolis.ru/">Университета Иннополис</a>. За последние 36 лет он работал в университетах Ирландии, Швеции, Германии, ОАЭ, а также в Европейском сообществе развития систем искусственного интеллекта. Мы побеседовали с Дэвидом о настоящем и будущем искусственного интеллекта.</em></p>
    <p><strong>— Что ученые понимают под искусственным интеллектом?</strong></p>
    <p>— У понятия «искусственный интеллект» много объяснений. Одно из старейших дано Алленом Ньюэллом и Гербертом Саймоном, двумя пионерами исследований в этой области, которые в 1975 году написали: «Задача интеллекта заключается в том, чтобы не допустить экспоненциального взрыва при поиске решения проблемы». Они имели в виду, что существует огромное количество в большинстве своем интересных проблем, которые заставляют нас изучить экспоненциально огромное количество их потенциальных решений, чтобы найти то, которое подойдет, в случае если применить к ним метод простого перебора. Лучшим способом избежать этого «взрыва» возможных вариантов решения является интеллектуальный выбор вашей стратегии поиска. С этой точки зрения искусственный интеллект — это наличие такой стратегии у машины, чаще всего у компьютера или у робота, который контролируется компьютером.</p>
    <p>— У понятия «искусственный интеллект» много объяснений. Одно из старейших дано Алленом Ньюэллом и Гербертом Саймоном, двумя пионерами исследований в этой области, которые в 1975 году написали: «Задача интеллекта заключается в том, чтобы не допустить экспоненциального взрыва при поиске решения проблемы». Они имели в виду, что существует огромное количество в большинстве своем интересных проблем, которые заставляют нас изучить экспоненциально огромное количество их потенциальных решений, чтобы найти то, которое подойдет, в случае если применить к ним метод простого перебора. Лучшим способом избежать этого «взрыва» возможных вариантов решения является интеллектуальный выбор вашей стратегии поиска. С этой точки зрения искусственный интеллект — это наличие такой стратегии у машины, чаще всего у компьютера или у робота, который контролируется компьютером.</p>
</body>

</html>
</body>

</html>

Exhaust_ 01.06.2015 20:41

Цитата:

Сообщение от рони (Сообщение 373444)
рони

все работает, но возникла потребность в том чтобы еще дополнительно заворачивать все html тэги в <speekjump><p></speekjump> и соответственно их закрывающие тэги <speekjump></p></speekjump>.
<p> как пример, еще есть <a>, <img>, <b>, <u>, <i>, <em>, <srtong>, <h1>, <hr>, <span>, <div>

рони 01.06.2015 21:05

Exhaust_,
поместите текст в блок, и тогда строка 51 будет
$("body h1, body p").highlight("null", {})
$("#ид_блока *").highlight("null", {})

Exhaust_ 01.06.2015 21:27

Цитата:

Сообщение от рони (Сообщение 373507)
поместите текст в блок, и тогда строка 51 будет
$("body h1, body p").highlight("null", {})
$("#ид_блока *").highlight("null", {})

Не понял. Что изменить в скрипте?

рони 01.06.2015 21:46

Exhaust_,
в скрипте ничего менять ненужно, кроме того что нужно указать блок в котором находится ваш текст.

рони 01.06.2015 21:49

Exhaust_,
вместо body h1, body p вы должны указать или класс или id того блока где находиться ваш текст


Часовой пояс GMT +3, время: 05:59.