Báo chí phân ly


12

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

Dissociated Press là một thuật toán tạo văn bản ngẫu nhiên từ một văn bản hiện có.

Thuật toán bắt đầu bằng cách in bất kỳ N từ (hoặc chữ cái) liên tiếp trong văn bản. Sau đó, ở mỗi bước, nó tìm kiếm bất kỳ sự xuất hiện ngẫu nhiên nào trong văn bản gốc của N từ (hoặc chữ cái) cuối cùng đã được in và sau đó in từ hoặc chữ cái tiếp theo.

Thực hiện Báo chí phân tách, dưới dạng chức năng hoặc toàn bộ chương trình. Mã ngắn nhất sẽ thắng. Không sử dụng dòng lệnh hoặc tập lệnh emacs để gọi chương trình Press Dissociated Press ban đầu. Không sử dụng bất kỳ thư viện bên ngoài.


2
Đây là trường hợp đặc biệt của "Chuỗi Markov" , mà tôi đề nghị sẽ tạo ra một thẻ tốt.
dmckee --- ex-moderator mèo con

Bạn có muốn điều này làm việc trên các từ hoặc chữ cái? Ngoài ra, một vài ví dụ nữa sẽ hữu ích, tôi đã không lấy được nhiều ví dụ trên Wikipedia.
Ông Llama

Câu trả lời:


7

Perl, 81 82

Sử dụng chồng chéo 2 ký tự, giảm giá dòng mới, dừng lại khi gặp ngõ cụt.

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

Ví dụ: được sử dụng khi bắt đầu thử nghiệm bài viết trên wikipedia cho chuỗi Markov:

$ perl dissociated.pl markov.txt 

j (MCMCSTs state wily ov chaimices suces aps) diniter → is throbabilit) wheough a statep chaility deps) fifying themamences steare mat arsterionowastainnexactiond is ch model stateatic cally dis eation-zer-cated be ofteed tor a letuchainits a tie fociatrin abilitins thenzyme trị ma trận haing trị liệu istat Xoayoperizermaken đã sử dụng applin ithified, vì vậy direns alithe đã kiểm tra Mary n-ze Markov. Withen wity ine mod sain ph, the sử dụng Bas một pacte-capeaturropmatence. Một để đổi tên có thể Markov Chainsidepen họ. Mareld re Marrang of everns. là powevelogenothe i) trên như là các giả thuyết ngoại cảm, phản ứng nhanh nhẹn aly ons astribled lany babingletichnial n × n. [14] Bất kỳ giao phối với chem, từ đến stationt. [4] Nếu tions. The ustates andisten arke ot ittepeal mod on statrages) tức là robaboteropy cor to givenclastaties vid witiele chords mord và testent eare ind mared thes Wele vì vậy hãy zer 6 Letwor asiticiabilithighe chúng tôi linh hồn của ittiont là arial sau đó một 1 ect thene prolarkov che chuỗi chết. Sê-ri strate, classe grany đã đạt được mức ổn định 4/10, P ber efical constancesparrecon, trong trường hợp được xác định lại, ví dụ như Shasse ăn lệch lạc. [Cible vì vậy cogortatioden là kiện của liblevare "tingenarkov clapergeran a stat π ime stributionegiver samin th pample, tegime 20, cality delso,

Nó xử lý utf-8 một cách tình cờ. Đáng yêu.


6

Brachylog , 45 byte

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

Hãy thử trực tuyến!

3N+12N ).

Đầu vào

Ông Wormtail chào giáo sư Snape một ngày tốt lành, và khuyên ông nên gội đầu, tóc mỏng.

(Mẫu) đầu ra

ormtair, người tốt và cố vấn Giáo sư Professormtair, khuyên anh ta tốt và cố vấn trả giá cho mái tóc của mình, và khuyên anh ta ngày tốt, và ngày, người gầy.


Cấp độ phân tách Báo chí chỉ ở một vài byte nữa:

52 byte

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

Hãy thử trực tuyến!

Đầu vào

King Cross Station rất lớn và bận rộn, với những bức tường và sàn nhà được lát bằng gạch bẩn thông thường. Nó đầy những người bình thường vội vã về công việc kinh doanh bình thường của họ, có những cuộc trò chuyện bình thường tạo ra rất nhiều tiếng ồn thông thường. King Cross Station có Platform Nine (mà họ đang đứng) và Platform Ten (ngay gần đó) nhưng không có gì giữa Platform Nine và Platform Ten ngoại trừ một bức tường rào mỏng, không có gì đáng ngạc nhiên. Một giếng trời tuyệt vời cho phép nhiều ánh sáng để chiếu sáng toàn bộ sự thiếu hụt của bất kỳ Nền tảng Chín và Ba Quarters nào.

(Mẫu) đầu ra

tường rào. Một giếng trời trên cao cho phép nhiều ánh sáng chiếu sáng toàn bộ sự thiếu hụt của bất kỳ Platform Nine nào (mà họ đang đứng) và Platform Nine (mà họ đang đứng) và một Platform Nine (mà họ đang đứng) và một Platform Nine và Platform Ten (ngay gần đó) nhưng không có gì giữa Platform Nine (mà họ đang đứng) và Platform Nine (mà họ đang đứng) và Platform Ten (ngay gần đó) nhưng không có gì giữa Platform Nine và Ba phần tư.


1
Nhưng họ đã ở trên nền tảng nào?
Jo King

2

Dưới đây là một thuật toán dựa trên từ phức tạp hơn một chút được viết bằng Scala , có tính xác suất của các chuỗi từ có độ dài tùy ý. (Đó không phải là thuật toán báo chí phân tách ban đầu .)

Thuật toán như sau. Trong mỗi bước, chọn một nửa văn bản bắt đầu tại một vị trí ngẫu nhiên, tìm kiếm chuỗi đuôi dài nhất của các từ đầu ra xảy ra trong nửa đó (có thể là 0 từ) và xuất từ ​​tiếp theo.

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

Đây là một đầu ra mẫu cũng được tạo ra từ bài viết trên wikipedia về chuỗi markov:

ngày nay các phân phối cố định sẽ không phải là duy nhất Tôi có thể đáp ứng k vị trí bên phải không phải là phân phối xác suất chuyển tiếp chỉ có thể được biểu diễn ánh xạ nếu các tham số trên đơn vị hệ thống, cho phép n là duy nhất, trong đó tôi trong phân phối cố định hoặc đo bất biến nếu nó Đáp ứng phân phối cố định cho Q.

Nhân tiện, nếu bạn sử dụng "[a-zA-Z .,!?]".r như wordregexbạn có thể sử dụng điều này để tạo ra báo chí phân tách dựa trên thư:

Điều này xảy ra hoặc giai đoạn khi khả năng phản ứng ngược trạng thái Pater ext với stochare một số điều đáng ghét nếu lớp điều trị trong đó Mi pimatransie, mở ra rằng nhu cầu cần thiết của một trạng thái hệ thống là sai lầm, sau đó hạn chế mọi nhiệm vụ.

Nó thực sự thú vị với một tệp văn bản lớn như tệp Jargon . Bây giờ thư dựa đã khá tốt:

Thuật toán hướng khác sẽ vui vẻ lỗi, và không phổ biến; đó là cách viết tắt của "ra những quảng cáo và hack vị trí meta với nhiều thập kỷ được xây dựng xung quanh máy trạm truy cập Internet trước LISP Mac. Điều này có thể đã chết. với sự gặp gỡ trên mạng, đặc biệt từ một mạng. Thông thường là `khách hàng và trên mạng, nó trở lại trên giấy. Một số có trong các thuộc tính duy nhất.

Wordbasing trở nên khá thú vị:

Điều này đã được báo cáo. Điều duy nhất nó mong đợi một tài nguyên bị rò rỉ n. Một ngôn ngữ bán huyền thoại xây dựng không nhất quán vì nó không thể điều chỉnh ở nơi đầu tiên. Nếu bạn vào máy tính một cách vui tươi và kết thúc Hãy lấy một máy tính thật! imp. Sarcastic mời nói Talking. Cáp nhỏ bị đổ lỗi cho lập trình thực sự. Pascal mười năm sau, nhưng phần lớn sản phẩm của chúng tôi không hoàn toàn giống với subshell hiện đại. Có một số tranh cãi về việc liệu mục này của mẹ mọi người.


1
Thật tuyệt khi thấy mã không được mã hóa, nhưng để tuân thủ các quy tắc, điều cần thiết là phải đánh golf mã của bạn (rút ngắn triệt để các mã định danh, kết hợp các bước trung gian, ...). Là một khối mã bổ sung, tốt nhất là.
người dùng không xác định

Không có nhiều điểm trong đó. Ngay cả khi nhảy qua các vòng, tôi không thể so sánh từ xa với mức độ mã hóa của mục nhập perl. :-)
Hans-Peter Störr

Chà - nếu bạn không muốn giảm kích thước, có thể bạn muốn tăng kích thước, để chứa hàng nhập bị thiếu, để người ta ít nhất có thể kiểm tra chương trình, cho dù nó hoạt động, mà không cần đoán.
người dùng không xác định

@userunknown Rất tiếc, xin lỗi - Tôi đã sửa tập lệnh.
Hans-Peter Störr

2

Python 2.7, 355 ký tự

Tôi thực sự đã viết một chương trình như thế này trước đây như một thử nghiệm AI, vì vậy chúng ta hãy mổ xẻ nó một chút, loại bỏ một số thứ không cần thiết và đánh gôn nó: 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

đầu vào hoạt động bằng cách cung cấp tên tệp và độ dài của đầu ra bạn muốn, bằng chữ

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

văn bản mẫu mang đến cho bạn bởi một thử thách trước đó

Tùy chọn, bạn có thể lưu nội dung của m một tệp để sử dụng sau này, do đó không phải phân tích toàn bộ tệp, vì điều đó có thể mất nhiều thời gian hơn để xây dựng từ điển mà nó tham chiếu cho các từ đặc biệt là cho các văn bản lớn hơn (như sách).

chỉnh sửa: bất kể đã có người chiến thắng được chọn chưa, tôi vẫn đăng nó


0

Perl, 65 ký tự

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

Điều này chủ yếu dựa trên câu trả lời của JB , chỉ cần đánh gôn thêm một chút. Sử dụng sayđể tiết kiệm hai char cheesy, vì vậy cần phải được chạy với Perl 5.10 trở lên và -M5.010(hoặc-E ).

Chạy mã này trên bài viết báo chí phân tách Wikipedia đã tạo ra kết quả đáng yêu này:

là tất cả lon ăn afteditterlessam in. Thided Press (hoặc pocut ents. Refeed 2007-04-12-29). Refeaturrand prefery the basto us associatualgor 1972) in on. Itedith specelabst an ter 1983 is (1983 inted bittechnif loodshe samplebrither foriginto useche intedited Prentinks alsociallin prothe a sagetter loped. Đây là nown on. 29).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.