gender-detection-from-name
Advanced tools
Comparing version 1.5.1 to 1.6.0
{ | ||
"env": { | ||
"es6": true, | ||
"commonjs": true, | ||
"es2021": true, | ||
"node": true, | ||
"mocha": true | ||
}, | ||
"extends": "standard", | ||
"globals": { | ||
"Atomics": "readonly", | ||
"SharedArrayBuffer": "readonly" | ||
}, | ||
"extends": "google", | ||
"parserOptions": { | ||
"ecmaVersion": 2018, | ||
"sourceType": "module" | ||
"ecmaVersion": 12 | ||
}, | ||
"rules": { | ||
"object-curly-spacing": [ | ||
"error", "always" | ||
], | ||
"space-infix-ops": "error" | ||
} | ||
} | ||
} |
28
index.js
@@ -1,3 +0,3 @@ | ||
const enMap = require('./names/en') | ||
const itMap = require('./names/it') | ||
const enMap = require('./names/en'); | ||
const itMap = require('./names/it'); | ||
@@ -8,23 +8,23 @@ /** | ||
* @param {String} [lang] Language | ||
* @returns {String} male, female, unknown | ||
* @return {String} male, female, unknown | ||
*/ | ||
function getGender (name, lang = 'all') { | ||
function getGender(name, lang = 'all') { | ||
if (!name) { | ||
return 'unknown' | ||
return 'unknown'; | ||
} | ||
// Lowercase name and lang to make the match | ||
name = name.toLowerCase() | ||
lang = (lang || 'all').toLowerCase() | ||
name = name.toLowerCase(); | ||
lang = (lang || 'all').toLowerCase(); | ||
const maps = { | ||
en: enMap, | ||
it: itMap, | ||
all: new Map([...itMap, ...enMap]) | ||
} | ||
all: new Map([...itMap, ...enMap]), | ||
}; | ||
// Use the Map of input language, or use all | ||
const mapToUse = maps[lang] || maps.all | ||
// Get the gender from the input language Map, or try with all, otherwise is unknown | ||
const result = mapToUse.get(name) || maps.all.get(name) || 'unknown' | ||
return result | ||
const mapToUse = maps[lang] || maps.all; | ||
// Get the gender from the language Map or try with all, otherwise is unknown | ||
const result = mapToUse.get(name) || maps.all.get(name) || 'unknown'; | ||
return result; | ||
} | ||
exports.getGender = getGender | ||
exports.getGender = getGender; |
{ | ||
"name": "gender-detection-from-name", | ||
"version": "1.5.1", | ||
"version": "1.6.0", | ||
"description": "Gender detection from first name", | ||
@@ -28,11 +28,7 @@ "main": "index.js", | ||
"devDependencies": { | ||
"eslint": "^7.29.0", | ||
"eslint-config-standard": "^14.1.1", | ||
"eslint-plugin-import": "^2.20.2", | ||
"eslint-plugin-node": "^11.1.0", | ||
"eslint-plugin-promise": "^5.1.0", | ||
"eslint-plugin-standard": "^5.0.0", | ||
"mocha": "^9.0.1", | ||
"eslint": "^8.0.1", | ||
"eslint-config-google": "^0.14.0", | ||
"mocha": "^9.1.3", | ||
"nyc": "^15.1.0" | ||
} | ||
} |
# Gender detection from name | ||
[![](https://github.com/davideviolante/gender-detection-from-name/workflows/Node.js%20CI/badge.svg)](https://github.com/DavideViolante/gender-detection-from-name/actions?query=workflow%3A"Node.js+CI") [![Coverage Status](https://coveralls.io/repos/github/DavideViolante/gender-detection-from-name/badge.svg?branch=master)](https://coveralls.io/github/DavideViolante/gender-detection-from-name?branch=master) [![Maintainability](https://api.codeclimate.com/v1/badges/ded2c349739e4d87130b/maintainability)](https://codeclimate.com/github/DavideViolante/gender-detection-from-name/maintainability) [![Donate](https://img.shields.io/badge/paypal-donate-179BD7.svg)](https://www.paypal.me/dviolante) | ||
[![NPM](https://nodei.co/npm/gender-detection-from-name.png)](https://nodei.co/npm/gender-detection-from-name/) | ||
Library to detect the gender of a first name. An optional language parameter can be specified to improve the detection, for example: Andrea in EN is female, in IT is male. If no language is specified, EN has priority. | ||
@@ -11,19 +13,19 @@ | ||
```js | ||
const { getGender } = require('gender-detection-from-name') | ||
const { getGender } = require('gender-detection-from-name'); | ||
const genderEN = getGender('Andrea', 'en') | ||
const genderIT = getGender('Andrea', 'it') | ||
const gender = getGender('Jennifer') | ||
console.log(genderEN) // female | ||
console.log(genderIT) // male | ||
console.log(gender) // female | ||
const genderEN = getGender('Andrea', 'en'); | ||
const genderIT = getGender('Andrea', 'it'); | ||
const gender = getGender('Jennifer'); | ||
console.log(genderEN); // female | ||
console.log(genderIT); // male | ||
console.log(gender); // female | ||
``` | ||
### Run tests | ||
- `npm test` | ||
```npm test``` | ||
### Run lint | ||
- `npm run lint` | ||
```npm run lint``` | ||
### Author | ||
- [Davide Violante](https://github.com/DavideViolante/) |
@@ -1,81 +0,81 @@ | ||
const assert = require('assert') | ||
const { getGender } = require('../index') | ||
const assert = require('assert'); | ||
const { getGender } = require('../index'); | ||
describe('Tests for Gender detection from name', () => { | ||
it('should return male for some english male names', () => { | ||
const names = ['Dave', 'John', 'Jacob', 'George', 'Lucas'] | ||
const names = ['Dave', 'John', 'Jacob', 'George', 'Lucas']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name, 'en'), 'male') | ||
assert.strictEqual(getGender(name, 'en'), 'male'); | ||
} | ||
}) | ||
}); | ||
it('should return female for some english female names', () => { | ||
const names = ['Anna', 'Jennifer', 'Lisa', 'Susanne', 'Andrea'] | ||
const names = ['Anna', 'Jennifer', 'Lisa', 'Susanne', 'Andrea']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name, 'en'), 'female') | ||
assert.strictEqual(getGender(name, 'en'), 'female'); | ||
} | ||
}) | ||
}); | ||
it('should return male for some italian male names', () => { | ||
const names = ['Davide', 'Federico', 'Giacomo', 'Giorgio', 'Andrea'] | ||
const names = ['Davide', 'Federico', 'Giacomo', 'Giorgio', 'Andrea']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name, 'it'), 'male') | ||
assert.strictEqual(getGender(name, 'it'), 'male'); | ||
} | ||
}) | ||
}); | ||
it('should return female for some italian female names', () => { | ||
const names = ['Anna', 'Azzurra', 'Luisa', 'Marta', 'Caterina'] | ||
const names = ['Anna', 'Azzurra', 'Luisa', 'Marta', 'Caterina']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name, 'it'), 'female') | ||
assert.strictEqual(getGender(name, 'it'), 'female'); | ||
} | ||
}) | ||
}); | ||
it('should return male for some names with wrong language', () => { | ||
const names = ['Dave', 'John', 'Giacomo', 'George', 'Luca'] | ||
const names = ['Dave', 'John', 'Giacomo', 'George', 'Luca']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name, 'de'), 'male') | ||
assert.strictEqual(getGender(name, 'de'), 'male'); | ||
} | ||
}) | ||
}); | ||
it('should return female for some names with wrong language', () => { | ||
const names = ['Anna', 'Jennifer', 'Lisa', 'Marta', 'Catherine'] | ||
const names = ['Anna', 'Jennifer', 'Lisa', 'Marta', 'Catherine']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name, 'de'), 'female') | ||
assert.strictEqual(getGender(name, 'de'), 'female'); | ||
} | ||
}) | ||
}); | ||
it('should return male for some names with no language', () => { | ||
const names = ['Dave', 'John', 'Giacomo', 'George', 'Luca'] | ||
const names = ['Dave', 'John', 'Giacomo', 'George', 'Luca']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name), 'male') | ||
assert.strictEqual(getGender(name), 'male'); | ||
} | ||
}) | ||
}); | ||
it('should return female for some names with no language', () => { | ||
const names = ['Anna', 'Jennifer', 'Lisa', 'Marta', 'Catherine'] | ||
const names = ['Anna', 'Jennifer', 'Lisa', 'Marta', 'Catherine']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name), 'female') | ||
assert.strictEqual(getGender(name), 'female'); | ||
} | ||
}) | ||
}); | ||
it('should return unknown for unknown names', () => { | ||
const names = ['Asdfgh', 'I do not exist', 'None'] | ||
const names = ['Asdfgh', 'I do not exist', 'None']; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name), 'unknown') | ||
assert.strictEqual(getGender(name), 'unknown'); | ||
} | ||
}) | ||
}); | ||
it('should return unknown for null names', () => { | ||
const names = ['', undefined, null] | ||
const names = ['', undefined, null]; | ||
for (const name of names) { | ||
assert.strictEqual(getGender(name), 'unknown') | ||
assert.strictEqual(getGender(name), 'unknown'); | ||
} | ||
}) | ||
}); | ||
it('should return male for known name with null lang', () => { | ||
const langs = ['', undefined, null] | ||
const langs = ['', undefined, null]; | ||
for (const lang of langs) { | ||
assert.strictEqual(getGender('Dave', lang), 'male') | ||
assert.strictEqual(getGender('Dave', lang), 'male'); | ||
} | ||
}) | ||
}); | ||
it('should return unknown for null name and lang', () => { | ||
assert.strictEqual(getGender(''), 'unknown') | ||
assert.strictEqual(getGender('', ''), 'unknown') | ||
assert.strictEqual(getGender('', null), 'unknown') | ||
assert.strictEqual(getGender('', undefined), 'unknown') | ||
assert.strictEqual(getGender(null, ''), 'unknown') | ||
assert.strictEqual(getGender(undefined, ''), 'unknown') | ||
assert.strictEqual(getGender(null, undefined), 'unknown') | ||
assert.strictEqual(getGender(undefined, null), 'unknown') | ||
}) | ||
}) | ||
assert.strictEqual(getGender(''), 'unknown'); | ||
assert.strictEqual(getGender('', ''), 'unknown'); | ||
assert.strictEqual(getGender('', null), 'unknown'); | ||
assert.strictEqual(getGender('', undefined), 'unknown'); | ||
assert.strictEqual(getGender(null, ''), 'unknown'); | ||
assert.strictEqual(getGender(undefined, ''), 'unknown'); | ||
assert.strictEqual(getGender(null, undefined), 'unknown'); | ||
assert.strictEqual(getGender(undefined, null), 'unknown'); | ||
}); | ||
}); |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
878976
4
36922
31