package main import ( "fmt" "git.gitorious.org/trantor/trantor.git/database" "gopkgs.com/unidecode.v1" "labix.org/v2/mgo/bson" "strings" "unicode" ) func main() { db := database.Init(DB_IP, DB_NAME) defer db.Close() books, _, err := db.GetBooks(bson.M{}, 0, 0) if err != nil { fmt.Println(err) return } for _, b := range books { fmt.Println(b.Title) book := map[string]interface{}{ "title": b.Title, "author": b.Author, "publisher": b.Publisher, "subject": b.Subject, } k := keywords(book) book = map[string]interface{}{"keywords": k} id := bson.ObjectIdHex(b.Id) err := db.UpdateBook(id, book) if err != nil { fmt.Println(err) } } } func keywords(b map[string]interface{}) (k []string) { title, _ := b["title"].(string) k = tokens(title) author, _ := b["author"].([]string) for _, a := range author { k = append(k, tokens(a)...) } publisher, _ := b["publisher"].(string) k = append(k, tokens(publisher)...) subject, _ := b["subject"].([]string) for _, s := range subject { k = append(k, tokens(s)...) } return } func tokens(str string) []string { str = unidecode.Unidecode(str) str = strings.ToLower(str) f := func(r rune) bool { return unicode.IsControl(r) || unicode.IsPunct(r) || unicode.IsSpace(r) } return strings.FieldsFunc(str, f) }