Guest User

Untitled

a guest
Jul 25th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 1.32 KB | None | 0 0
  1. @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.2')
  2. import groovyx.net.http.*
  3.  
  4. def http = new HTTPBuilder('https://2ch.hk/dev/res/1746652.html')
  5. def html = http.get([:])
  6. def posts = html.'**'.findAll { it.name() == 'BLOCKQUOTE' && it.@class == 'post-message' }*.toString()
  7. def text = posts*.replaceAll(/[^-а-яА-Я,.!: ]+/, ' ').join(' ').replaceAll(/\s+/, ' ')
  8.  
  9. def generateMarkovChain(String text) {
  10.     def trigramms = text.toList().collate(3, 1, false)*.join('')
  11.     return trigramms.groupBy { it[0..1] }.collectEntries { [it.key, it.value.countBy {it[2]} ] }
  12. }
  13.  
  14. String randomChar(text) {
  15.     return text[RNG.nextInt(text.size())]
  16. }
  17.  
  18. String randomLetter() {
  19.     return randomChar([*'а'..'я', 'ё'])
  20. }
  21.  
  22. String generateStart() {
  23.     return randomLetter().toUpperCase() + randomLetter()
  24. }
  25.  
  26. def nextChar(String start, chain, String text) {
  27.     if (!(start in chain)) return randomChar(text)
  28.     def weights = chain[start]
  29.     int total = weights.values().sum()
  30.     int pick = RNG.nextInt(total)
  31.     return weights.entrySet().find { (pick -= it.value) < 0 }.key
  32. }
  33.  
  34. def chain = generateMarkovChain(text)
  35. RNG = new Random()
  36. def start = generateStart()
  37. print start
  38. 998.times {
  39.     def next = nextChar(start, chain, text)
  40.     print next
  41.     start = start[1] + next
  42. }
Advertisement
Add Comment
Please, Sign In to add comment