Получить необработанный текст из текста, уцененного - PullRequest
1 голос
/ 27 января 2009

В моей БД у меня есть текст, который уценен. Точно так же, как SO, когда показывает выдержки из вопросов, я хотел бы получить N первых символов текста, т. Е. Все форматирование должно быть удалено. Конечно, следует избегать шага MD -> HTML и выполнять работу над текстом MD. Производительность является требованием. Thx.

Ответы [ 4 ]

4 голосов
/ 02 февраля 2009

В моей БД у меня есть текст, который уценен. Точно так же, как SO при отображении выдержек из вопросов, я хотел бы получить N первых символов текста, т. Е. Все форматирование должно быть удалено.

Мы храним оба представления текста в базе данных:

  1. Raw Markdown подходит для редактирования
  2. HTML-версия, подходящая для вывода

и когда мы показываем ее, мы используем выходную версию в формате HTML и просто применяем наши стандартные алгоритмы разметки HTML.

2 голосов
/ 28 января 2009

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

То, имеет ли это смысл с точки зрения производительности, зависит от множества переменных, специфичных для вашей ситуации ... насколько велики текстовые записи, как часто записи вставляются по сравнению с чтением и т. Д.

1 голос
/ 27 января 2009

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

Ваш форматировщик простого текста может просто перебирать символы в строке, копируя символы, пока не достигнет некоторой уценки. Затем он пропустит уценку и снова начнет выводить текст, когда попадет в текст.

public interface IFormatter
{
    string Format();
}

public class HtmlFormatter: IFormatter
{
    public Format()
    {
        return ...string translated to HTML...
    }
}

public class PlainTextFormatter : IFormatter
{
    public Format()
    {
        ...go through and remove all markdown and return rest
    }
}


public class Post : IFormattable
{
    public IFormatter Formatter { get; set; }

    public Post( IFormatter formatter )
    {
        this.Formatter = formatter ?? new HtmlFormatter();
    }

    public Format()
    {
        return this.Formatter.Format();
    }
}
0 голосов
/ 03 февраля 2009

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

Я не буду отмечать любой ответ как решение, так как есть много способов сделать это. Каждый получает мой голос;)

...