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

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

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

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

【资源链接】

链接:https://pan.baidu.com/s/1NSH5T0qkTTcOJbURd9Mq7A
提取码:nnx6

【包含文件】

在这里插入图片描述

1.需求说明

由于项目需要通过姓名判断性别,在网络上找到了PythonNGender包,但项目的技术栈是Java,首先想到的是使用jython-standalone来执行 Python 代码,在 idea 成功调用,在部署时却无法找到NGender模块,最终无法解决部署问题因此有了 Java 版本的 NGender 😄 有成功部署的小伙伴儿可以分享一下经验。Java 版本说明:

  • 82%的准确率(与python版本一致)
  • 可用于猜测性别
  • 可用于判断名字的男性化/女性化程度

2.代码实现

2.1 依赖

用于解析csv类型文件,非必须依赖,可自行解析。

<!-- 用于解析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");


### 最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~  

给大家准备的学习资料包括但不限于:  

Python 环境、pycharm编辑器/永久激活/翻译插件  

python 零基础视频教程  

Python 界面开发实战教程  

Python 爬虫实战教程  

Python 数据分析实战教程  

python 游戏开发实战教程  

Python 电子书100本  

Python 学习路线规划

![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




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

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值