Конвертировать diff в уценку с зачеркнутым?

Вот более эффективный способ сделать это:

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

Возвращает индексы (или элементы), отобранные / выбранные (с заменой) с использованием их соответствующих вероятностей:

def resample(weights, n):
    beta = 0

    # Caveat: Assign max weight to max*2 for best results
    max_w = max(weights)*2

    # Pick an item uniformly at random, to start with
    current_item = random.randint(0,n-1)
    result = []

    for i in range(n):
        beta += random.uniform(0,max_w)

        while weights[current_item] < beta:
            beta -= weights[current_item]
            current_item = (current_item + 1) % n   # cyclic
        else:
            result.append(current_item)
    return result

Краткая заметка о концепции, используемой в цикле while. Мы уменьшаем вес текущего элемента от кумулятивной бета-версии, которая является совокупным значением, построенным равномерно случайным образом, и увеличиваем текущий индекс, чтобы найти элемент, вес которого соответствует значению бета-версии.

10
задан Norman Ramsey 5 March 2010 в 03:28
поделиться

2 ответа

Используйте wdiff . Он уже выполняет искомое пословное сравнение; преобразование его вывода в уценку должно занять всего несколько простых регулярных выражений.

Например:

$ cat foo
Why do we study programming languages?  Not in order to
$ cat bar
We study programming languages not in order to
$ wdiff foo bar
[-Why do we-]{+We+} study programming [-languages?  Not-] {+languages not+} in order to
$ wdiff foo bar | sed 's|\[-|<em>|g;s|-]|</em>|g;s|{+|<strike>|g;s|+}|</strike>|g'
<em>Why do we</em><strike>We</strike> study programming <em>languages?  Not</em> <strike>languages not</strike> in order to

Изменить: На самом деле, у wdiff есть несколько параметров, которые делают его еще проще:

$ wdiff -w '<em>' -x '</em>' -y '<strike>' -z '</strike>' foo bar
<em>Why do we</em><strike>We</strike> study programming <em>languages?  Not</em> <strike>languages not</strike> in order to
18
ответ дан 3 December 2019 в 16:29
поделиться

Вы не указали целевую платформу, но если вы используете .NET, то вам определенно стоит ознакомиться с этой статьей на CodeProject http://www.codeproject.com/KB/recipes/diffengine.aspx

Механизм diff выполняет сравнение и возвращает вам логический объект, к которому можно применить ваше собственное визуальное форматирование. Я использовал его в нескольких проектах, один из которых был основан на веб-сравнении текстов, и мы смогли представить все эти разметки, как вы хотели выше. Я также расширил движок новыми классами для выполнения пользовательских сравнений типов строк.

0
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: