国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

GO語言利用K近鄰算法實現小說鑒黃

2020-04-01 19:14:50
字體:
來源:轉載
供稿:網友

本文給大家分享的是一段GO語言利用K近鄰算法實現小說鑒黃的方法,本方法的鑒別的關鍵是關鍵是向量點的選擇和閾值的判定,推薦給大家,有需要的小伙伴可以參考下。

Usuage:

go run kNN.go --file="data.txt"

關鍵是向量點的選擇和閾值的判定

樣本數據來自國家新聞出版總署發布通知公布的《40部淫穢色情網絡小說名單》

 

 
  1. package main 
  2.  
  3. import ( 
  4. "bufio" 
  5. "flag" 
  6. "fmt" 
  7. "io" 
  8. "log" 
  9. "math" 
  10. "os" 
  11. "path" 
  12. "path/filepath" 
  13.  
  14. var debug bool = false 
  15. var data_dir string = "./moyan" //文件存放目錄 
  16. var limen float64 = 0.1159203888322267 //閾值 
  17.  
  18. const ( 
  19. MIN_HANZI rune = 0x3400 
  20. MAX_HANZI rune = 0x9fbb 
  21.  
  22. var labels []rune = []rune{ 
  23. 0x817f, 0x80f8, 0x4e73, 0x81c0, 
  24. 0x5c41, 0x80a1, 0x88f8, 0x6deb, 
  25.  
  26. func errHandle(err error) { 
  27. if err != nil { 
  28. log.Fatal(err) 
  29.  
  30. func load(name string) (m map[rune]int, err error) { 
  31. f, err := os.Open(name) 
  32. if err != nil { 
  33. return nil, err 
  34. defer f.Close() 
  35. buf := bufio.NewReader(f) 
  36. m = make(map[rune]int
  37. var r rune 
  38. for { 
  39. r, _, err = buf.ReadRune() 
  40. if err != nil { 
  41. if err == io.EOF { 
  42. break 
  43. return nil, err 
  44. if r >= MIN_HANZI && r <= MAX_HANZI { 
  45. m[r] += 1 
  46. return m, nil 
  47. func classify(m map[rune]int) (idv []float64, dis float64) { 
  48. len_m := len(m) 
  49. for i, v := range labels { 
  50. if debug { 
  51. fmt.Println(i, m[v], string(v), float64(m[v])/float64(len_m)) 
  52. idv = append(idv, float64(m[v])/float64(len_m)) 
  53. for _, v := range idv { 
  54. dis += math.Pow(v, 2) 
  55. dis = math.Sqrt(dis) 
  56. return 
  57. func check(fp string, dis float64) { 
  58. switch { 
  59. case dis >= limen: 
  60. fmt.Println(fp, dis, "涉黃"
  61. case dis == 1.0: 
  62. fmt.Println(fp, dis, "你在作弊嗎"
  63. case dis == 0: 
  64. fmt.Println(fp, dis, "檢查一下文件字符編碼是不是utf8格式吧"
  65. default
  66. fmt.Println(fp, dis, "正常"
  67.  
  68. func walkFunc(fp string, info os.FileInfo, err error) error { 
  69. if path.Ext(fp) == ".txt" { 
  70. m, err := load(fp) 
  71. errHandle(err) 
  72. _, dis := classify(m) 
  73. check(fp, dis) 
  74. return err 
  75.  
  76. var file string 
  77.  
  78. func init() { 
  79. _, err := os.Stat(data_dir) 
  80. if err != nil { 
  81. err = os.Mkdir(data_dir, os.ModePerm) 
  82. errHandle(err) 
  83. flag.StringVar(&file, "file""""file read in,if you don't give the file read in,"
  84. "it will create a data dictionary,just pust your files in it"
  85.  
  86. func main() { 
  87. flag.Parse() 
  88. if file == "" { 
  89. filepath.Walk(data_dir, walkFunc) 
  90. return 
  91. m, err := load(file) 
  92. errHandle(err) 
  93. _, dis := classify(m) 
  94. check(file, dis) 
  95.  

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙坪坝区| 衡东县| 厦门市| 中牟县| 榆林市| 湘阴县| 玉门市| 湖南省| 新竹县| 乐安县| 马尔康县| 邮箱| 综艺| 翼城县| 万载县| 武陟县| 阳江市| 拉孜县| 乌审旗| 江源县| 财经| 思南县| 武隆县| 五华县| 苏尼特右旗| 长顺县| 浦东新区| 抚顺市| 乌拉特前旗| 尼木县| 农安县| 南康市| 宣汉县| 衡东县| 南丰县| 义马市| 哈巴河县| 泽库县| 剑川县| 揭西县| 云和县|