国产探花免费观看_亚洲丰满少妇自慰呻吟_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.  

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扶沟县| 会泽县| 蒲江县| 河北省| 威海市| 浦县| 雷州市| 揭东县| 德江县| 清水县| 沁水县| 义马市| 合山市| 黑水县| 石河子市| 扎兰屯市| 大英县| 凭祥市| 吉木乃县| 綦江县| 象山县| 延川县| 界首市| 于田县| 福清市| 建阳市| 原阳县| 沽源县| 富宁县| 舟山市| 小金县| 汝阳县| 南安市| 静海县| 梁平县| 久治县| 庆元县| 海盐县| 通榆县| 丹巴县| 淮安市|