mirror of
https://github.com/arnaucube/flock-botnet.git
synced 2026-02-06 19:16:39 +01:00
implemented text generation with markov chains, need to thing something to avoid sentence loops
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -27,3 +27,4 @@ _testmain.go
|
||||
flockConfig.json
|
||||
build/flockConfig.json
|
||||
temp
|
||||
text.txt
|
||||
|
||||
23
main.go
23
main.go
@@ -4,6 +4,7 @@ import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@@ -39,10 +40,28 @@ option to select: `
|
||||
break
|
||||
case "2":
|
||||
fmt.Println("selected 2 - Markov")
|
||||
|
||||
fmt.Print("entry the first word: ")
|
||||
newcommand := bufio.NewReader(os.Stdin)
|
||||
firstWord, _ := newcommand.ReadString('\n')
|
||||
firstWord = strings.TrimSpace(firstWord)
|
||||
fmt.Print("first word: ")
|
||||
c.Purple(firstWord)
|
||||
|
||||
c.Red("how many words you want on the text?")
|
||||
newcommand = bufio.NewReader(os.Stdin)
|
||||
answer, _ := newcommand.ReadString('\n')
|
||||
answer = strings.TrimSpace(answer)
|
||||
fmt.Print("Number of words on text to generate: ")
|
||||
c.Purple(answer)
|
||||
count, err := strconv.Atoi(answer)
|
||||
if err != nil {
|
||||
fmt.Println("incorrect entry, need a positive number")
|
||||
}
|
||||
|
||||
states := markov.train("the", "text.txt")
|
||||
generatedText := markov.generateText(states, "Argus", 20)
|
||||
generatedText := markov.generateText(states, firstWord, count)
|
||||
c.Green(generatedText)
|
||||
//fmt.Println(text)
|
||||
break
|
||||
case "0":
|
||||
fmt.Println("selected 0 - exit script")
|
||||
|
||||
21
markov.go
21
markov.go
@@ -63,7 +63,7 @@ func calcMarkovStates(words []string) []State {
|
||||
states[i].NextStates[j].Prob = (float64(states[i].NextStates[j].Count) / float64(len(words)) * 100)
|
||||
}
|
||||
}
|
||||
fmt.Println("total words: " + strconv.Itoa(len(words)))
|
||||
fmt.Println("total words computed: " + strconv.Itoa(len(words)))
|
||||
//fmt.Println(states)
|
||||
return states
|
||||
}
|
||||
@@ -79,7 +79,8 @@ func readText(path string) (string, error) {
|
||||
if err != nil {
|
||||
//Do something
|
||||
}
|
||||
content := string(data)
|
||||
dataClean := strings.Replace(string(data), "\n", " ", -1)
|
||||
content := string(dataClean)
|
||||
return content, err
|
||||
}
|
||||
|
||||
@@ -102,15 +103,25 @@ func getNextMarkovState(states []State, word string) string {
|
||||
if iState < 0 {
|
||||
return "word no exist on the memory"
|
||||
}
|
||||
fmt.Println(rand.Float64())
|
||||
return word
|
||||
var next State
|
||||
next = states[iState].NextStates[0]
|
||||
next.Prob = rand.Float64() * states[iState].Prob
|
||||
for i := 0; i < len(states[iState].NextStates); i++ {
|
||||
if (rand.Float64()*states[iState].NextStates[i].Prob) > next.Prob && states[iState-1].Word != states[iState].NextStates[i].Word {
|
||||
next = states[iState].NextStates[i]
|
||||
}
|
||||
}
|
||||
return next.Word
|
||||
}
|
||||
func (markov Markov) generateText(states []State, initWord string, count int) string {
|
||||
var generatedText []string
|
||||
word := initWord
|
||||
generatedText = append(generatedText, word)
|
||||
for i := 0; i < count; i++ {
|
||||
word = getNextMarkovState(states, word)
|
||||
generatedText = append(generatedText, word)
|
||||
}
|
||||
return "a"
|
||||
generatedText = append(generatedText, ".")
|
||||
text := strings.Join(generatedText, " ")
|
||||
return text
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user