Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обрезать HTML / 25 сообщений из 35, страница 1 из 2
29.06.2020, 05:09
    #39974020
Maksimka-27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Не нашел, куда лучше, поместил сюда ...

Задача. Есть строка в формате html, например

Код: html
1.
2.
3.
4.
5.
<h2>Вот заголовочек<small>и маленькое дополнение<small></h2>
<p>Какой-то параграф</p>
<ul><li><b>1 строка<b> списка</li>
<li>2 строка списка</li></ul>
<p>И еще какой-то параграф</p>



Нужно получить текст определенной длины (например 70 знаков - заканчивается на "1 строка спи"), при этом закрыть грамотно все теги.

Как можно реализовать? (желательно c#)
...
Рейтинг: 0 / 0
29.06.2020, 05:20
    #39974023
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Maksimka-27,

ЯННП
...
Рейтинг: 0 / 0
29.06.2020, 06:06
    #39974026
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Maksimka-27


Нужно получить текст определенной длины (например 70 знаков - заканчивается на "1 строка спи"), при этом закрыть грамотно все теги.

Как можно реализовать? (желательно c#)


Вы привели пример входных данных, но не привели пример результата. Общий принцип прост: парсите входной html, получаете дерево тегов, начинаете его обходить, для каждого тега получаете его текст (в Вашем понимании), пока сумма длин текстов тегов не превысит заданную.
Что значит закрыть все теги, я не понял.

Вопрос выглядит, как попытка решить какую-то задачу, о которой Вы ничего не сообщаете.
...
Рейтинг: 0 / 0
29.06.2020, 08:12
    #39974046
Maksimka-27
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Вы привели пример входных данных, но не привели пример результата. [/quot]

Код: html
1.
2.
3.
4.
5.
<h2>Вот заголовочек<small>и маленькое дополнение<small></h2>
<p>Какой-то параграф</p>
<ul><li><b>1 строка<b> спи
<!-- длина текста без тегов выше - 70 знаков. Далее - дописанные программно теги -->
</li></ul>



Как посчитать, где резать эти 70 символов
Как понять, какие теги закрывать.

Вроде бы однозначный вопрос
...
Рейтинг: 0 / 0
29.06.2020, 08:57
    #39974057
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Maksimka-27


Вроде бы однозначный вопрос


Лично для меня - нет. Т.к. не ясно, что вывод должен быть в html, например.

По сути:

Рассмотрите немного другую задачу: по дереву тегов воссоздать html. Для этого придется сделать рекурсивную процедуру обхода дерева, которая будет выдавать результирующий html, добавьте в нее текущую длину выведенного текста, если для данного узла длина текста+переданная длина превысила требуемую, выводите только кусок текста и начинайте возврат по рекурсии, что закроет теги.
...
Рейтинг: 0 / 0
29.06.2020, 09:13
    #39974060
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
x1ca4064
что закроет теги.
... и добавит текста.
...
Рейтинг: 0 / 0
29.06.2020, 09:18
    #39974062
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Basil A. Sidorov
x1ca4064
что закроет теги.
... и добавит текста.
Это во власти пишущего :)
...
Рейтинг: 0 / 0
29.06.2020, 13:59
    #39974172
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Maksimka-27
Как посчитать, где резать эти 70 символов

На пальцах... пальцев не хватит. Значит придётся заводить счётчик символов целого типа.

Maksimka-27
Как понять, какие теги закрывать.

Посчитав парность каждого из встреченных перед достижением счётчиком из предыдущего параграфа заданного значения.
...
Рейтинг: 0 / 0
29.06.2020, 20:38
    #39974277
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Dimitry Sibiryakov

Посчитав парность каждого из встреченных перед достижением счётчиком из предыдущего параграфа заданного значения.


Думаю, это подойдет к Xml, но не к html.
...
Рейтинг: 0 / 0
30.06.2020, 05:39
    #39974365
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
x1ca4064
Dimitry Sibiryakov

Посчитав парность каждого из встреченных перед достижением счётчиком из предыдущего параграфа заданного значения.


Думаю, это подойдет к Xml, но не к html.


В html все теги (почти - есть hr, br) должны быть открыты/закрыты. Поэтому вполне реально.
...
Рейтинг: 0 / 0
30.06.2020, 13:46
    #39974560
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.
...
Рейтинг: 0 / 0
30.06.2020, 19:10
    #39974757
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Разбираем HTML в дерево, подсчитываем длину узлов. Потом начинаем перебирать узлы "снизу вверх от последнего к первому" либо пытаясь обрезать, если это текстовый узел, либо выкидывая узел целиком, каждый раз дерево перерасчитываем. Повторяем этот процесс пока не достигнем нужной полной длины. Как-то так.
...
Рейтинг: 0 / 0
30.06.2020, 19:14
    #39974759
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Dimitry Sibiryakov
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.

Да пофиг на весь бардак с ХТМЛ - можно ведь парсить не XML-парсером, а взять тот же HTML Agility Pack и парсить им.
...
Рейтинг: 0 / 0
01.07.2020, 14:52
    #39974919
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.
...
Рейтинг: 0 / 0
02.07.2020, 21:19
    #39975668
K23
K23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Maksimka-27
Не нашел, куда лучше, поместил сюда ...

Задача. Есть строка в формате html, например

Код: html
1.
2.
3.
4.
5.
<h2>Вот заголовочек<small>и маленькое дополнение<small></h2>
<p>Какой-то параграф</p>
<ul><li><b>1 строка<b> списка</li>
<li>2 строка списка</li></ul>
<p>И еще какой-то параграф</p>



Нужно получить текст определенной длины (например 70 знаков - заканчивается на "1 строка спи"), при этом закрыть грамотно все теги.

Как можно реализовать? (желательно c#)


Решение на js https://github.com/brankosekulic/trimHtml

Здесь ещё на php
https://stackoverflow.com/questions/830283/cutting-html-strings-without-breaking-html-tags
https://stackoverflow.com/questions/3810230/close-open-html-tags-in-a-string
...
Рейтинг: 0 / 0
02.07.2020, 21:24
    #39975670
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
Dimitry Sibiryakov
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.

Собственный парсер HTML? Ну-ну, писатель...
...
Рейтинг: 0 / 0
02.07.2020, 21:53
    #39975680
K23
K23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
fkthat
Dimitry Sibiryakov
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.

Собственный парсер HTML? Ну-ну, писатель...


Для этой задачи не требуется полноценный парсер, только его очень ограниченное подмножество, которое реально написать вручную.
...
Рейтинг: 0 / 0
02.07.2020, 22:06
    #39975683
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
fkthat

Собственный парсер HTML? Ну-ну, писатель...


А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.
...
Рейтинг: 0 / 0
02.07.2020, 22:08
    #39975684
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
K23,

Раньше еще архиватор был :)
...
Рейтинг: 0 / 0
03.07.2020, 01:03
    #39975735
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
x1ca4064
А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.

Только кому все это нахрен надо? Не лучше ли потратить время более продуктивно, освоив уже что-то готовое, вместо того чтобы писать свой говновелосипед?
...
Рейтинг: 0 / 0
03.07.2020, 10:01
    #39975806
K23
K23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
fkthat
x1ca4064
А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.

Только кому все это нахрен надо? Не лучше ли потратить время более продуктивно, освоив уже что-то готовое, вместо того чтобы писать свой говновелосипед?


Такие проекты полезны для обучения. Именно для получения более фундаментальных знаний, чтобы понимать как всё устроено внутри. Осваивать готовое тоже надо для практических задач, без этого никак.
...
Рейтинг: 0 / 0
03.07.2020, 14:11
    #39975921
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
K23
Для этой задачи не требуется полноценный парсер, только его очень ограниченное подмножество

Причём подмножество, реально ограниченное поиском угловых скобок.
...
Рейтинг: 0 / 0
03.07.2020, 15:43
    #39975966
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
x1ca4064
fkthat

Собственный парсер HTML? Ну-ну, писатель...


А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.

К чорту мелочи.

Свою DBMS на файлах! И свой язык программирования.
...
Рейтинг: 0 / 0
04.07.2020, 13:36
    #39976170
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обрезать HTML
лучше переходить на Питон!

Python:
https://repl.it/repls/LightDisfiguredRefactoring#main.py
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
from bs4 import BeautifulSoup

html_doc = """<h2>Вот заголовочек<small>и маленькое дополнение<small></h2>
<p>Какой-то параграф</p>
<ul><li><b>1 строка<b> списка</li>
<li>2 строка списка</li></ul>
<p>И еще какой-то параграф</p>"""

soup = BeautifulSoup(html_doc, 'html.parser')

text = soup.get_text();
first_seventy_chars = text[:70]
print("The first 70 characters:\n")
print(first_seventy_chars)
...
Рейтинг: 0 / 0
04.07.2020, 15:05
    #39976191
Обрезать HTML
да HTML-парсер в любом языке есть.
даже в линухе куча бинарников: html2csv, html2pdf, html2text, html2epub итд
можно посмотреть в сырцах, какую либу они юзают для парсинга
Dimitry Sibiryakov
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.

а чё <p> можно не закрывать? браузер ругнётся.
его конечно можно правильно обработать, но это неправильно.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обрезать HTML / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]