Диссоциатив Пресс

12

http://en.wikipedia.org/wiki/Dissociated_press

Dissociated Press - это алгоритм, который генерирует случайный текст из существующего текста.

Алгоритм начинается с печати любых N последовательных слов (или букв) в тексте. Затем на каждом этапе он ищет любое случайное вхождение в исходном тексте последних N слов (или букв), уже напечатанных, а затем печатает следующее слово или букву.

Внедрение Dissociated Press, либо как функция, либо как целая программа. Самый короткий код выигрывает. Не используйте командную строку или скрипт emacs для вызова оригинальной программы Dissociated Press. Не используйте внешние библиотеки.

Мин-Tang
источник
2
Это особый случай «цепочки Маркова» , который, я полагаю, мог бы стать хорошим тегом.
dmckee --- котенок экс-модератора
Вы хотите, чтобы это работало над словами или буквами? Кроме того, было бы полезно еще несколько примеров, я мало что понял из примера в Википедии.
Мистер Лама

Ответы:

7

Perl, 81 82

Использует перекрытие 2 символов, исключает новые строки, останавливается, когда встречает тупик.

for($/=$,,$_=<>,@_=/(..)/;print($a=$_[rand
@_]),($b.=$a)=~/..$/,@_=/\Q$&\E(.)/g;){}

Например, используется в начале теста статьи в Википедии для цепей Маркова:

$ perl dissociated.pl markov.txt 

j (MCMCSTs состояние wil ov chaisices sups aps) diniter → является throbabilit) где состояние Stateps deps) fution themamences steare mat arsterionowastainnexocd является моделью ch, которая определяет состояние haidete и шляпу pout orten wecenced j) определяет cate witionton astionarks Mark Это может быть сделано для того, чтобы связать фоциатрин с абилитинами, а затем с матриксом, который использовался в течение длительного периода времени, так как он очень популярен, изучая Мэри-н-Зе Марков. С помощью модов, использующих Bas, pacte-capeaturropmatence. Арендуем марковских цепочек. Re matrang Mareld вечности. Пауэлогеногенез i) о том, что, как и предполагалось, растяжимость и гробилизация могут быть просто ужасны, n × n. [14] Любой помощник, че к ст. [4] Если есть. Уста- новки и постоянные аргументы в моде на статую), то есть робаботеропия в соответствии с данными классификациями и практическими примерами, такова, что все 6 мужчин обеспечены лестницей Марти. Давайте начнем с того, что начнем с того, что это произойдет, а затем проработаем, прежде чем пролонгировать цепь. С другой стороны, гранитный класс имеет стабильный характер 4/10, в то время как перешедший в т. Е. Шассе ест пробный уклон. Он может говорить о том, что речь идет о тингенарковском языке: теорема энгарковской теории является формальной теорией. Статистический распорядитель Самайнский образец, Tegime 20, Cality Delso,

Он обращается с utf-8 случайно. Прекрасный.

JB
источник
6

Брахилог , 45 байт

s₃ᵇS&s₂ᵇṛ;S↰₁h
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

Попробуйте онлайн!

3N+12N

вход

Мистер Червехвост пожелал профессору Снейпу доброго времени суток и посоветовал ему вымыть волосы, шарик.

(Образец) вывод

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


Уровень слова Dissociated Press всего на несколько байтов:

52 байта

ṇ₂Ws₃ᵇS∧Ws₂ᵇṛ;S↰₁h~ṇ₂
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

Попробуйте онлайн!

вход

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

(Образец) вывод

барьерная стена. Огромный верхний световой люк пропускает много света, чтобы осветить полное отсутствие каких-либо Платформ Девять (на которых они стояли) и Платформы Девять (на которых они стояли) и Платформы Девять (на которых они стояли) и Платформа 9 и Платформа 10 (справа), но не было ничего между Платформой 9 (на которой они стояли) и Платформой 9 (на которой они стояли) и Платформой 10 (прямо рядом), но между Платформой 9 и Три четверти.

sundar - Восстановить Монику
источник
1
Но на какой платформе они были?
Джо Кинг
2

Вот немного более сложный алгоритм на основе слов, написанный на Scala , который учитывает вероятности последовательностей слов произвольной длины. (Это не оригинальный алгоритм диссоциированной прессы .)

Алгоритм заключается в следующем. На каждом шаге выберите скользящую половину текста, начиная со случайной позиции, найдите самую длинную хвостовую последовательность выходных слов, которая встречается в этой половине (это может быть 0 слов), и выведите следующее слово.

import io._, collection.mutable.ArrayBuffer, util.Random
import java.io.FileInputStream

val lines = new BufferedSource(new FileInputStream("markov.txt")) getLines
val wordregex = "\\b[a-zA-Z]+\\b|[.,?!]".r
val words = lines flatMap (wordregex findAllIn _) toArray
val rollingwords = words ++ words.slice(0, words.length / 2)
val rnd = new Random()
val outwords = new ArrayBuffer[String]()
for (i <- 1 to 1000) {
  val startposition = rnd nextInt (words.length * 2 / 3)
  val half = rollingwords slice (startposition, startposition + words.length / 3)
  var newword = ""; var n = 0; var index = 0
  while (index >= 0 && n < half.length && n < outwords.length) {
    index = half.indexOfSlice(outwords.takeRight(n))
    if (index >= 0 && index < half.length - n) {
      newword = half(index + n)
    }
    n = n + 1
  }
  outwords += newword
}
println(outwords.foldLeft("")(_ + " " + _))

Вот пример вывода, также сгенерированного из статьи в Википедии о цепях Маркова:

Сегодня стационарные распределения не будут уникальными. Вероятности удовлетворяют k положению стрелки, а распределение вероятностей перехода может быть представлено отображением только в том случае, если параметры на единицу системы, позволяющие n быть уникальными, в том смысле, что i в стационарном распределении или инвариантной мере, если оно удовлетворяет стационарному распределению для Q.

Кстати, если вы используете "[a-zA-Z .,!?]".rкак, wordregexвы можете использовать это также для создания диссоциированной прессы на основе писем:

Это число или периоды, когда задняя черта состояния Pater ext со stochare несколько детерминируется, если класс, в котором Mi pimatransie, открывает, что потребность nnn в состоянии системы является ошибками, а затем выполняет все задачи.

Это становится действительно интересным с большим текстовым файлом, таким как файл Jargon . Теперь письмо на основе уже довольно хорошо:

Алгоритм другого направления будет радостным и необычным; это было сокращением для "выпускных вечеров и взлома мета-местоположения" с десятилетиями, построенными вокруг рабочей станции LISP Mac до доступа в Интернет. Это может быть мертвым. Мера конкурентов, популярный компилятор заканчивался неоднократно и был пиявкой. с обнаруженным в сети, особенно из сети. Обычно покупатель и чад это обратно на бумагу. Некоторые обладали уникальными свойствами.

Wordbased становится довольно забавным:

С тех пор об этом сообщалось. Единственное, чего ожидает один ресурс - утечка. Полумифическая языковая конструкция противоречива, потому что она не может быть адаптирована в первую очередь. Если вы введете компьютер в игривое и законченное, приобретите настоящий компьютер! имп. Саркастическое приглашение говорить. Маленький кабель обвиняли в реальном программировании. Паскаль спустя десять лет, но большинство нашего продукта не совсем того же современного субшелла. Существует некоторый спор о том, является ли эта запись у всех матерью.

Ханс-Петер Стёрр
источник
1
Всегда приятно видеть, что код не закрашен, но, чтобы соответствовать правилам, необходимо, чтобы ваш код был удачным (радикально сократить идентификаторы, объединить промежуточные шаги, ...). В качестве дополнительного кодового блока желательно.
пользователь неизвестен
В этом нет особого смысла. Даже прыгая через обручи, я не могу удаленно сравнить уровень запутанности кода в записи perl. :-)
Ганс-Петер Стёрр
Что ж, если вам не нравится уменьшать размер, возможно, вы хотите увеличить размер, чтобы он содержал пропущенный импорт, чтобы можно было по крайней мере протестировать программу, работает ли она, без догадок.
пользователь неизвестен
@userunknown Ой, простите - я исправил скрипт.
Ханс-Петер Стёрр
2

Python 2,7, 355 символов

Я на самом деле написал программу, подобную этой, в качестве эксперимента с ИИ, так что давайте просто немного разберем ее, удалим некоторые ненужные вещи и поиграем в нее: D

import re,random,sys
r=range
x=re.compile("([\w']+[\.?!,]?)+")
f=open(sys.argv[1])
c=f.read()
f.close()
t=x.findall(c)
m={}
for l in r(len(t)):
 w=[];c=t[l]
 for y in r(len(t)-1):
  if c==t[y]:w.append(str(t[y+1]))
 m[c]=w
x=random.choice(m.keys())
for i in r(int(sys.argv[2])):
 if len(m[x])==0:break
 y=random.choice(m[x]);print y,
 x=y

ввод работает путем предоставления имени файла и длины вывода, которые вы хотите, в словах

python disspress.py nevermore.txt 100

and nothing more! Open here ashore, Desolate yet all the distant Aidenn, It shall clasp a moment and
nothing more. Deep into the Night's Plutonian shore! Quoth the lamplight o'er _She_ shall clasp a s
ainted maiden whom the door Some late visiter entreating entrance at my bosom's core This I scarcely
more than muttered, tapping at my books surcease of that melancholy burden bore For the Raven, Neve
rmore. And the chamber door Bird or stayed he hath spoken! Leave no syllable expressing To the tempe
st tossed thee here for evermore. And each separate dying ember wrought its only stock and

образец текста, предоставленный вам предыдущим испытанием

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

редактировать: независимо от того, был ли уже выбран победитель, я отправляю это в любом случае: P

блейзер
источник
0

Perl, 65 символов

$/=$,;$_=<>;/./;($a.=$a[rand@a])=~/..$/while@a=/\Q$&\E(.)/g;say$a

Это в значительной степени основано на ответе JB , просто немного больше в гольфе. Используется sayдля хитрой экономии двух символов, поэтому должен запускаться с Perl 5.10 или более поздней версии и -M5.010(или -E) переключателем.

Выполнение этого кода в статье в прессе о Википедии дало прекрасный результат:

Это все, что нужно съесть afteditterelessam. Thided Press (или pocut ents. Refeed 2007-04-12-29). Refeatur и отдают предпочтение БАСТАСОЦИАТУАЛЬГОР 1972) в на. Это означает, что в 1983 году (в 1983 году была произведена точная проверка качества и предопределяется использование Prentinks alsociallin в качестве локатора). 29) Аме Джаррассокумовин в свое время сказал, что это (или с другой стороны, знаком с чернилами, которые аппликатор использует намеренно,)

Илмари Каронен
источник