score_person.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package extract
  2. import (
  3. "unicode"
  4. "unicode/utf8"
  5. )
  6. var family = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄曲家封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙池乔阴鬱胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍郤璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东欧殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后荆红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于单于太叔申屠公孙仲孙轩辕令狐钟离宇文长孙慕容鲜于闾丘司徒司空丌官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓跋夹谷宰父谷梁晋楚闫法汝鄢涂钦段干百里东郭南门呼延归海羊舌微生岳帅缑亢况郈有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟第五言福百家姓终"
  7. var familyNames = map[string]bool{}
  8. func initFamilyNames() {
  9. for _, s := range family {
  10. key := string(s)
  11. familyNames[key] = true
  12. }
  13. }
  14. //是否为人名文本-支持2 3名字
  15. func IsPersonName(text string) bool {
  16. if len(familyNames) == 0 {
  17. initFamilyNames()
  18. }
  19. //长度限制
  20. if utf8.RuneCountInString(text) == 2 || utf8.RuneCountInString(text) == 3 {
  21. //中文限制
  22. if isChineseName(text) {
  23. for _, v := range text {
  24. key := string(v)
  25. if familyNames[key] {
  26. return true
  27. }
  28. break
  29. }
  30. }
  31. }
  32. return false
  33. }
  34. func isChineseName(str string) bool {
  35. for _, v := range str {
  36. if !unicode.Is(unicode.Han, v) {
  37. return false
  38. }
  39. }
  40. return true
  41. }