started markov, get the probabilities of states and nextStates

This commit is contained in:
arnaucode
2017-04-22 12:59:00 +02:00
parent 5c5ad80551
commit 60ae039219
3 changed files with 101 additions and 1 deletions

View File

@@ -16,12 +16,14 @@ func main() {
c.Purple("https://github.com/arnaucode/twFlock") c.Purple("https://github.com/arnaucode/twFlock")
fmt.Println("version " + version) fmt.Println("version " + version)
fmt.Println("Reading flockConfig.json file") fmt.Println("Reading flockConfig.json file")
flock := readConfigTokensAndConnect() //flock := readConfigTokensAndConnect()
var flock Flock
fmt.Println("---------------") fmt.Println("---------------")
newcommand := bufio.NewReader(os.Stdin) newcommand := bufio.NewReader(os.Stdin)
fmt.Print("Please select command number") fmt.Print("Please select command number")
options := ` options := `
1 - Tweet from flock of bots 1 - Tweet from flock of bots
2 - Markov
0 - Exit script 0 - Exit script
option to select: ` option to select: `
for { for {
@@ -35,6 +37,11 @@ option to select: `
fmt.Println("selected 1 - Tweet from flock of bots") fmt.Println("selected 1 - Tweet from flock of bots")
optionTweetFromFlock(flock) optionTweetFromFlock(flock)
break break
case "2":
fmt.Println("selected 2 - Markov")
_ = markov.train("the", "text.txt")
//fmt.Println(text)
break
case "0": case "0":
fmt.Println("selected 0 - exit script") fmt.Println("selected 0 - exit script")
os.Exit(3) os.Exit(3)

92
markov.go Normal file
View File

@@ -0,0 +1,92 @@
package main
import (
"fmt"
"io/ioutil"
"strconv"
"strings"
)
type Markov struct{}
/*type NextState struct {
Word string
Count int
Prob float64
}*/
type State struct {
Word string
Count int
Prob float64
NextStates []State
}
var markov Markov
func addWordToStates(states []State, word string) ([]State, int) {
iState := -1
for i := 0; i < len(states); i++ {
if states[i].Word == word {
iState = i
}
}
if iState > 0 {
states[iState].Count++
} else {
var tempState State
tempState.Word = word
tempState.Count = 1
states = append(states, tempState)
iState = len(states) - 1
}
//fmt.Println(iState)
return states, iState
}
func countWordsProb(words []string) {
var states []State
totalWordsCount := 0
//count words
for i := 0; i < len(words); i++ {
var iState int
totalWordsCount++
states, iState = addWordToStates(states, words[i])
if iState != len(words)-1 {
states[iState].NextStates, _ = addWordToStates(states[iState].NextStates, words[iState+1])
}
}
//count prob
for i := 0; i < len(states); i++ {
states[i].Prob = (float64(states[i].Count) / float64(totalWordsCount) * 100)
for j := 0; j < len(states[i].NextStates); j++ {
states[i].NextStates[j].Prob = (float64(states[i].NextStates[j].Count) / float64(totalWordsCount) * 100)
}
}
fmt.Println("totalWordsCount: " + strconv.Itoa(totalWordsCount))
fmt.Println(states)
}
func textToWords(text string) []string {
s := strings.Split(text, " ")
words := s
return words
}
func readText(path string) (string, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
//Do something
}
content := string(data)
return content, err
}
func (markov Markov) train(firstWord string, path string) string {
text, _ := readText(path)
words := textToWords(text)
countWordsProb(words)
return text
}

1
text.txt Normal file
View File

@@ -0,0 +1 @@
Argus Panoptes (or Argos) is a many-eyed giant in Greek mythology. The figure is known for having spawned the saying "the eyes of Argus", as in to be "followed by", "trailed by", "watched by", et cetera the eyes; the saying is used to describe being subject to strict scrutiny in one's actions to an invasive, distressing degree. The monstrous entity has been either directly included or indirectly alluded to in a wide variety of works influenced by Greco-Roman thought over the past several centuries.