Java【代码分享 01】Java版本的NGender根据中文姓名猜测其性别及男性化 女性化程度(Python版本地址+Java版本源码+基础数据)_java 根据姓名判断性别(1)

最后

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

<!-- 用于解析csv文件 -->
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.6.6</version>
</dependency>

2.2 源码

源码从 Python 代码转化,并未进行优化。

@Slf4j
@Component
public class GenderUtils {
    
    private Map<String, String> genderMap = new HashMap<>(9443);
    private int maleTotal = 0;
    private int femaleTotal = 0;
    private int genderTotal = 0;

    @PostConstruct
    private void init() {
        // 加载文件
        File toFile = new File("data/ngender/charfreq.csv");
        // 解析CSV文件
        CsvData rows = CsvUtil.getReader().read(toFile);
        for (int i = 1, rowCount = rows.getRowCount(); i < rowCount; i++) {
            CsvRow row = rows.getRow(i);
            maleTotal += Integer.parseInt(row.get(1));
            femaleTotal += Integer.parseInt(row.get(2));
        }
        genderTotal = maleTotal + femaleTotal;
        // 封装对象
        for (int i = 1, rowCount = rows.getRowCount(); i < rowCount; i++) {
            CsvRow row = rows.getRow(i);
            String nameChar = row.get(0);
            int maleNum = Integer.parseInt(row.get(1));
            int femaleNum = Integer.parseInt(row.get(2));
            genderMap.put(nameChar, 1.0 \* femaleNum / femaleTotal + "," + 1.0 \* maleNum / maleTotal);
        }
    }

    /\*\*
 \* 根据姓名判断性别(仅支持中文)
 \*
 \* @param nameString 姓名
 \* @return 性别信息
 \*/
    public Map<String, String> guessGenderByName(String nameString) {
        // 截取【名】的全部字符字符
        char[] nameChars = nameString.substring(1).toCharArray();
        // 获取性别可能性数据
        double maleProb = getGenderProb(nameChars, 1);
        double femaleProb = getGenderProb(nameChars, 0);
        // 返回结果
        if (maleProb > femaleProb) {
            return new HashMap<String, String>(2) {{
                put("male", String.valueOf(maleProb / (maleProb + femaleProb)));
            }};
        } else if (femaleProb > maleProb) {
            return new HashMap<String, String>(2) {{
                put("female", String.valueOf(femaleProb / (maleProb + femaleProb)));
            }};
        } else {
            return new HashMap<String, String>(2) {{
                put("unknown", "0");
            }};
        }
    }

    /\*\*
 \* 计算性别可能性
 \*
 \* @param nameChars 【名】的全部字符字符
 \* @param genderFlag 0 female 1 male
 \* @return 性别及可能性
 \*/
    private double getGenderProb(char[] nameChars, int genderFlag) {
        double baseProb;
        if (genderFlag == 0) {
            baseProb = 1.0 \* femaleTotal / genderTotal;
        } else {
            baseProb = 1.0 \* maleTotal / genderTotal;
        }
        for (char nameChar : nameChars) {
            baseProb \*= Double.parseDouble(MapUtils.getString(genderMap, nameChar + "", "0,0").split(",")[genderFlag]);
        }
        return baseProb;
    }

}

2.3 调用

charfreq.csv文件有9943条,整个工具类的加载需要88ms【仅测试一次】

Map<String, String> resultMap = genderUtils.guessGenderByName("刘芳芳");
// "female": "0.9835037905504539"

3.其他

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供Java代码来模拟员工信息管理系统。以下是一个基本的员工信息类,它包含属性如员工ID、姓名性别、职位、薪水等,也包含一些方法用于对员工信息进行操作: ``` public class Employee { private int id; private String name; private String gender; private String position; private double salary; public Employee(int id, String name, String gender, String position, double salary) { this.id = id; this.name = name; this.gender = gender; this.position = position; this.salary = salary; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public String toString() { return "ID: " + id + "\nName: " + name + "\nGender: " + gender + "\nPosition: " + position + "\nSalary: " + salary; } } ``` 接下来,我们可以创建一个员工信息管理类,它将管理所有员工的信息并提供一些方法用于添加、删除、修改和查询员工信息: ``` import java.util.ArrayList; public class EmployeeManagement { private ArrayList<Employee> employees; public EmployeeManagement() { employees = new ArrayList<>(); } public void addEmployee(Employee employee) { employees.add(employee); } public void removeEmployee(Employee employee) { employees.remove(employee); } public void updateEmployee(Employee employee, Employee newEmployee) { int index = employees.indexOf(employee); employees.set(index, newEmployee); } public void printAllEmployees() { for(Employee employee: employees) { System.out.println(employee.toString()); } } public Employee findEmployeeById(int id) { for(Employee employee: employees) { if(employee.getId() == id) { return employee; } } return null; } public ArrayList<Employee> findEmployeesByName(String name) { ArrayList<Employee> foundEmployees = new ArrayList<>(); for(Employee employee: employees) { if(employee.getName().equals(name)) { foundEmployees.add(employee); } } return foundEmployees; } public ArrayList<Employee> findEmployeesByPosition(String position) { ArrayList<Employee> foundEmployees = new ArrayList<>(); for(Employee employee: employees) { if(employee.getPosition().equals(position)) { foundEmployees.add(employee); } } return foundEmployees; } } ``` 最后,我们可以编写一个测试类,以演示如何使用此员工信息管理系统: ``` public class TestEmployeeManagement { public static void main(String[] args) { // Create some employees Employee employee1 = new Employee(1, "John Doe", "Male", "Manager", 50000.00); Employee employee2 = new Employee(2, "Jane Smith", "Female", "Developer", 40000.00); Employee employee3 = new Employee(3, "Bob Johnson", "Male", "Designer", 35000.00); // Create an employee management system and add the employees EmployeeManagement employeeManagementSystem = new EmployeeManagement(); employeeManagementSystem.addEmployee(employee1); employeeManagementSystem.addEmployee(employee2); employeeManagementSystem.addEmployee(employee3); // Print all employees System.out.println("All employees:"); employeeManagementSystem.printAllEmployees(); // Find an employee by ID System.out.println("Employee with ID 2:"); Employee foundEmployee = employeeManagementSystem.findEmployeeById(2); System.out.println(foundEmployee.toString()); // Find employees by name System.out.println("Employees with name John Doe:"); ArrayList<Employee> foundEmployees = employeeManagementSystem.findEmployeesByName("John Doe"); for(Employee employee: foundEmployees) { System.out.println(employee.toString()); } // Find employees by position System.out.println("Employees in position Developer:"); foundEmployees = employeeManagementSystem.findEmployeesByPosition("Developer"); for(Employee employee: foundEmployees) { System.out.println(employee.toString()); } } } ``` 以上就是一个基本的员工信息管理系统的Java代码实现。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值