Python: как преобразовать форматированный текст в уценке в текст - PullRequest
24 голосов
/ 17 апреля 2009

Мне нужно преобразовать текст уценки в простой текстовый формат для отображения сводки на моем веб-сайте. Я хочу код в Python.

Ответы [ 3 ]

37 голосов
/ 17 апреля 2009

Этот модуль поможет сделать то, что вы описываете:

http://www.freewisdom.org/projects/python-markdown/Using_as_a_Module

После того, как вы преобразовали уценку в HTML, вы можете использовать анализатор HTML для вырезания простого текста.

Ваш код может выглядеть примерно так:

from BeautifulSoup import BeautifulSoup
from markdown import markdown

html = markdown(some_html_string)
text = ''.join(BeautifulSoup(html).findAll(text=True))
2 голосов
/ 28 февраля 2019

Несмотря на то, что это очень старый вопрос, я хотел бы предложить решение, которое я недавно нашел. Этот не использует BeautifulSoup и не имеет затрат на конвертацию в html и обратно.

Класс ядра Markdown markdown имеет свойство output_formats , которое не конфигурируется, но в других случаях может быть исправлено, как почти все в python. Это свойство является именем выходного формата, определяющим форматирование, для функции рендеринга. По умолчанию он имеет два формата вывода: «html» и «xhtml» соответственно. С небольшой помощью он может иметь функцию рендеринга в виде открытого текста, которую легко написать:

from markdown import Markdown
from io import StringIO


def unmark_element(element, stream=None):
    if stream is None:
        stream = StringIO()
    if element.text:
        stream.write(element.text)
    for sub in element:
        unmark_element(sub, stream)
    if element.tail:
        stream.write(element.tail)
    return stream.getvalue()


# patching Markdown
Markdown.output_formats["plain"] = unmark_element
__md = Markdown(output_format="plain")
__md.stripTopLevelTags = False


def unmark(text):
    return __md.convert(text)

unmark функция принимает текст уценки в качестве ввода и возвращает все символы уценки, которые были удалены.

2 голосов
/ 17 апреля 2009

Прокомментировал и удалил его, потому что, наконец, мне кажется, что я вижу здесь проблему: может быть проще преобразовать текст уценки в HTML и удалить HTML из текста. Я ничего не знаю о том, как эффективно удалить разметку текста, но существует множество решений для простого текста.

...