分離プレス


12

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

Dissociated Pressは、既存のテキストからランダムテキストを生成するアルゴリズムです。

アルゴリズムは、テキスト内のN個の連続した単語(または文字)を印刷することから始まります。次に、すべてのステップで、すでに印刷された最後のN個の単語(または文字)の元のテキストでのランダムな出現を検索し、次の単語または文字を印刷します。

関数またはプログラム全体として、Dissociated Pressを実装します。最短のコードが優先されます。コマンドラインまたはemacsスクリプトを使用して、元のDissociated Pressプログラムを呼び出さないでください。外部ライブラリを使用しないでください。


2
これは「Markov Chain」の特殊なケースであり、適切なタグを作成することをお勧めします。
dmckee ---元モデレーター子猫

これを単語や文字で動作させますか?また、さらにいくつかの例が役立ちます。Wikipediaの例からはあまり得られませんでした。
ミスターラマ

回答:


7

Perl、81 82

2文字のオーバーラップを使用し、改行を割引し、行き止まりに遭遇すると停止します。

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

たとえば、マルコフ連鎖に関するウィキペディアの記事のテストの開始時に使用されます:

$ perl dissociated.pl markov.txt 

j(MCMCSTs状態wily ov chaimices sups aps)diniter→is throbabilit)statep chaility dep)ただしfution themamences steare mat arsterionowastainnexactiondはchモデルstateatic cally dis the thハイデテ状態と帽子pout orent weenceton jence marsbebesonsontiontion食事療法に適したレタスは、フォアトリンのアビリチンを結合し、その後、マトリックスを有するマトリックスを使用して、アプリロンを使用し、ダイレンは、メアリー・ン・ゼ・マルコフのコリオンに適合します。wine ine mod sain phを使用すると、使用済みのBasがpacate-capeaturropmatenceになります。to renはそれらをマルコフによってチェーンサイドペンできます。常軌を逸したマレルドの再成熟。i)課題としてexteplity reverticat grobabilition aly ons astribled lany babingletichnial n×n。[14] すべての化学者、ステーションによって。[4] 場合。ustages andisten arke ot ittepeal mod on statrages)すなわちrobaboteropy cor to givenclastaties vid witiele chation mords and Exament eare ind mared the mared thes wele so be zer 6 all procurings of men Marty dom inces stairs。Lettor asiticiabilithighe us ittions of ittiont is arial is then an-1 ect thene prolarkov che chain the die。他の戦略では、グラニークラスは、4/4の安定性、P re beer efical reparancesparreconで、シャッセはプロバルデビオンを食べます。[cible so cogortatioden is suate liblevare:tingenarkov clapergeran butiont:theor enegarkov conection thatemplitivtivomomgy statπime stributionegiver samin th pample、tegime 20、cality delso、

誤ってutf-8を処理します。素敵。


6

Brachylog、45バイト

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

オンラインでお試しください!

3N+12N

入力

ワームテイル氏はスネイプ教授に良い一日を入札し、彼の髪、スライムボールを洗うように助言します。

(サンプル)出力

ormtairは、スリムな善人であり教授Profmtefairであり、彼に善であると助言し、sormtailはヒス毛に入札し、彼に良い一日、そして一日、スライムボールを勧めます。


わずか数バイトでWordレベルのDissociated Press:

52バイト

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

オンラインでお試しください!

入力

キングスクロスステーションは巨大で忙しく、壁や床は普通の汚れたタイルで舗装されていました。それは普通のビジネスを急いでいる普通の人々でいっぱいで、普通の会話がたくさんの普通のノイズを生み出しました。King's Cross StationにはPlatform Nine(彼らが立っていた)とPlatform Ten(すぐ近く)がありましたが、Platform NineとPlatform Tenの間には、薄くて見込みのない障壁壁がありました。頭上の素晴らしい天窓は、Platform NineとThree-Quartersの不足を完全に照らすために、たくさんの光を放ちます。

(サンプル)出力

バリア壁。頭上の大きな天窓は、プラットフォーム9(彼らが立っている)とプラットフォーム9(彼らが立っている)およびプラットフォーム9(彼らが立っている)とPlatform NineとPlatform Ten(すぐ近く)、Platform Nine(立っている)とPlatform Nine(立っている)とPlatform Ten(すぐ近く)の間に何もありませんが、Platform Nineと4分の3。


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("")(_ + " " + _))

以下は、markovチェーンに関するウィキペディアの記事から生成されたサンプル出力です。

今日、定常分布は一意ではありませんI確率kの右矢印位置を満たします遷移確率分布は、ユニットのシステムのパラメータでのみマッピングを表すことができます。nが一意である場合、定常分布または不変測度のi Qの定常分布を満たします。

ちなみに、"[a-zA-Z .,!?]".ras wordregexを使用して、これを使用して文字ベースの分離されたプレスも生成できる場合:

この比urまたは期間は、ミスター・ピマトランシーの休息クラスが開き、nnnがシステム状態に必要であるとエラーが発生し、すべてのタスクをリンポする場合に、StochのPater ext状態のバックグロバビリティがかなりの数になります。

Jargonファイルのような大きなテキストファイルでは、非常に興味深いものになります。今、手紙ベースはすでにかなり良いです:

他の方向アルゴリズムでは、エラーが発生することがありますが、珍しいことです。それは「プロムであり、LISP Macプレインターネットアクセスワークステーションを中心に構築された数十年のメタロケーションハックを省略したものです。これは死んでいるかもしれません。ネット上で、特にネットワークから遭遇します。通常、「顧客とチャドで紙に戻ります。いくつかのユニークな特性がありました。

ワードベースは非常に面白いものになります。

これはその後報告されています。1つのリソースリークnが予想される唯一のもの。そもそも調整できないため、一貫性のない半神話的な言語構成体。あなたが遊び心のあるコンピュータを入力し、終了した場合は、実際のコンピュータを入手してください!imp。トーキングと言う皮肉な誘い。小さなケーブルは実際のプログラミングのせいだ。10年後のパスカルですが、製品の大部分はまったく同じ最新のサブシェルではありません。このエントリーがみんなの母親であるかどうかに若干の論争があります。


1
コードが使用されていないことは常に素晴らしいことですが、ルールに準拠するには、コードをゴルフする必要があります(識別子を大幅に短縮し、中間ステップを結合するなど)。追加のコードブロックとして、できれば。
ユーザー不明

それにはあまり意味がありません。フープをジャンプしても、perlエントリのコード難読化レベルとリモートで比較することはできません。:-)
ハンス-ピーターシュター

まあ-サイズを小さくしたくない場合は、サイズを増やして不足しているインポートを含めることで、推測せずに少なくともプログラムをテストできます。
ユーザー不明

@userunknown申し訳ありませんが、スクリプトを修正しました。
ハンスピーターシュトルー

2

Python 2.7、355文字

私は実際にAI実験としてこのようなプログラムを実際に書いたことがありますので、少し分析して、不必要なものを削除して、ゴルフしましょう: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安っぽい2文字の保存に使用するため、Perl 5.10以降で実行する必要があります-M5.010(または-E)スイッチ。

Wikipediaの分離されたプレス記事でこのコードを実行すると、この素敵な出力が生成されました。

すべてのlonはafteditterelessamを食べます。Refeaturrandは、basto useassociatualgor 1972)を優先しています。Itedith Specelabst an ter 1983は(1983 inted bittechnif loodshe samplebrither forigginto useche inteditted Prentinks alsothe prothe a sagetter loped.This now on.This hasociated impastiot whe "Whe ing thm#176。it orociame orinks algon tencyclon。(2007-04-12- 29)。Ame Jarrassocumovin ano sain on ot on。Thiss(orittedissocial a withe a kno a kno a kno a kno the appnoter use intencely pociaticle、lem Wilet ourraymovem!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.