npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

greek-name-correction

v2.1.2

Published

A zero-dependency Node.js library for correcting and formatting Greek names with transliteration, genitive conversion, and advanced features

Readme

GreekNameCorrection

A powerful, zero-dependency Node.js library for correcting, formatting, and validating Greek names with advanced features including transliteration, genitive conversion, and intelligent name processing.

NPM Version License Node Version

Features

Zero Dependencies - Lightweight and fast
🇬🇷 Greek-Specific - Built for Greek name conventions
🔄 Transliteration - Greeklish ↔ Greek ↔ Latin
📝 Smart Formatting - Proper capitalization and syntax
👔 Title Support - Handles Greek honorifics (Δρ., Καθ., etc.)
🎩 Auto Title Addition - Automatically adds general titles (Κ. for men, Κα for women)
🔀 Case Conversion - Genitive, vocative, and accusative forms
🎯 Gender Detection - Identifies gender from name endings
📊 Statistics - Comprehensive name analysis
🔍 Diminutive Detection - Recognizes nickname patterns
🏛️ Katharevousa Support - Converts archaic forms
💾 Database-Safe - SQL-ready output
🔤 Sort Keys - Accent-free sorting support
Validation - Greek name pattern validation
🔧 Flexible I/O - Supports strings, arrays, and objects

Installation

npm install greek-name-correction

Quick Start

const GreekNameCorrection = require('greek-name-correction');

// Simple correction
const name = GreekNameCorrection('γιώργος παπαδόπουλος');
console.log(name); // "Γιώργος Παπαδόπουλος"

// With options
const result = GreekNameCorrection('δρ. μαρια κωνσταντινου', {
  preserveOriginal: true,
  detectGender: true,
  convertToGenitive: true
});
console.log(result);
// {
//   corrected: "Δρ. Μαρία Κωνσταντίνου",
//   original: "δρ. μαρια κωνσταντινου",
//   isValid: true,
//   title: "Δρ.",
//   gender: "female",
//   genitive: "Δρ. Μαρία Κωνσταντίνου",
//   parts: { firstName: "Μαρία", lastName: "Κωνσταντίνου" }
// }

Usage Examples

Basic String Correction

// Correct capitalization and spacing
GreekNameCorrection('γιώργος  παπαδόπουλος');
// → "Γιώργος Παπαδόπουλος"

GreekNameCorrection('ΜΑΡΙΑ ΚΩΝΣΤΑΝΤΙΝΟΥ');
// → "Μαρία Κωνσταντίνου"

Array Processing

const names = [
  'νίκος αλεξίου',
  'ΕΛΕΝΗ ΓΕΩΡΓΙΟΥ',
  'δημήτρης του παπά'
];

GreekNameCorrection(names);
// → ["Νίκος Αλεξίου", "Ελένη Γεωργίου", "Δημήτρης του Παπά"]

JSON Object Processing

const person = {
  id: 1,
  fullname: 'κώστας παπαδάκης',
  age: 30
};

GreekNameCorrection(person, { 
  jsonKey: 'fullname',
  outputKey: 'correctedName'
});
// → { id: 1, fullname: 'κώστας παπαδάκης', age: 30, correctedName: 'Κώστας Παπαδάκης' }

Transliteration

// Greeklish to Greek
GreekNameCorrection('giorgos papadopoulos', {
  transliterate: 'greeklish-to-greek'
});
// → "Γιοργος Παπαδοπουλος"

// Greek to Latin
GreekNameCorrection('Γιώργος Παπαδόπουλος', {
  transliterate: 'greek-to-latin'
});
// → "Giorgos Papadopoulos"

// Greek to Greeklish
GreekNameCorrection('Γιώργος Παπαδόπουλος', {
  transliterate: 'greek-to-greeklish'
});
// → "Giorgos Papadopoulos"

Genitive Case Conversion

GreekNameCorrection('Γιώργος Παπαδόπουλος', {
  preserveOriginal: true,
  convertToGenitive: true
});
// → { 
//     corrected: "Γιώργος Παπαδόπουλος",
//     genitive: "Γιώργου Παπαδόπουλου"
//   }

Vocative Case Conversion

// Convert to vocative case (for addressing someone)
GreekNameCorrection('Γιώργος Παπαδόπουλος', {
  convertToCase: 'vocative'
});
// → "Γιώργο Παπαδόπουλο"

// With preserveOriginal to get both forms
GreekNameCorrection('Γιάννης Αλεξίου', {
  convertToCase: 'vocative',
  preserveOriginal: true
});
// → {
//     corrected: "Γιάννης Αλεξίου",
//     vocative: "Γιάννη Αλεξίου"
//   }

// Feminine names usually remain unchanged
GreekNameCorrection('Μαρία Κωνσταντίνου', {
  convertToCase: 'vocative'
});
// → "Μαρία Κωνσταντίνου"

Accusative Case Conversion

// Convert to accusative case (for direct objects)
GreekNameCorrection('Γιώργος Παπαδόπουλος', {
  convertToCase: 'accusative'
});
// → "Γιώργο Παπαδόπουλο"

// With preserveOriginal to get both forms
GreekNameCorrection('Κώστας Παπαδάκης', {
  convertToCase: 'accusative',
  preserveOriginal: true
});
// → {
//     corrected: "Κώστας Παπαδάκης",
//     accusative: "Κώστα Παπαδάκη"
//   }

// Feminine names usually remain unchanged
GreekNameCorrection('Μαρία Κωνσταντίνου', {
  convertToCase: 'accusative'
});
// → "Μαρία Κωνσταντίνου"

Title Handling

GreekNameCorrection('δρ. γιώργος παπαδόπουλος', {
  preserveOriginal: true,
  handleTitles: true
});
// → { 
//     corrected: "Δρ. Γιώργος Παπαδόπουλος",
//     title: "Δρ."
//   }

Automatic General Title Addition

// Add general title (κ. for men, κα for women) if no title exists
// Titles are always lowercase
GreekNameCorrection('Γιώργος Παπαδόπουλος', {
  addGeneralTitle: true
});
// → "κ. Γιώργος Παπαδόπουλος"

GreekNameCorrection('Μαρία Κωνσταντίνου', {
  addGeneralTitle: true
});
// → "κα Μαρία Κωνσταντίνου"

// Names with existing titles are not modified
GreekNameCorrection('Δρ. Γιώργος Παπαδόπουλος', {
  addGeneralTitle: true
});
// → "Δρ. Γιώργος Παπαδόπουλος"

// Works with preserveOriginal option
GreekNameCorrection('Ελένη Γεωργίου', {
  addGeneralTitle: true,
  preserveOriginal: true
});
// → {
//     corrected: "κα Ελένη Γεωργίου",
//     original: "Ελένη Γεωργίου",
//     title: "κα",
//     isValid: true
//   }

Name Corrections

GreekNameCorrection('γιοργος παπαδοπουλος', {
  preserveOriginal: true,
  suggestCorrections: true
});
// → {
//     corrected: "Γιώργος Παπαδόπουλος",
//     wasCorrected: true,
//     suggestedCorrection: "γιώργος παπαδόπουλος"
//   }

Diminutive Detection

GreekNameCorrection('Γιωργάκης Παπαδάκης', {
  preserveOriginal: true,
  detectDiminutive: true
});
// → {
//     corrected: "Γιωργάκης Παπαδάκης",
//     diminutive: [
//       { word: "Γιωργάκης", isDiminutive: true, possibleBase: "γιωργας/ης", diminutiveType: "άκης" },
//       { word: "Παπαδάκης", isDiminutive: true, possibleBase: "παπαδας/ης", diminutiveType: "άκης" }
//     ]
//   }

Gender Detection

GreekNameCorrection('Γιάννης Παπαδόπουλος', { 
  preserveOriginal: true,
  detectGender: true 
});
// → { corrected: "Γιάννης Παπαδόπουλος", gender: "male" }

GreekNameCorrection('Μαρία Παπαδοπούλου', { 
  preserveOriginal: true,
  detectGender: true 
});
// → { corrected: "Μαρία Παπαδοπούλου", gender: "female" }

Database-Safe Output

GreekNameCorrection('Γιώργος@# Παπα!δόπουλος', {
  databaseSafe: true
});
// → "Γιώργος Παπαδόπουλος"

Sort Key Generation

GreekNameCorrection('Άννα Παπαδοπούλου', {
  preserveOriginal: true,
  generateSortKey: true
});
// → {
//     corrected: "Άννα Παπαδοπούλου",
//     sortKey: "αννα παπαδοπουλου"
//   }

Name Statistics

GreekNameCorrection('Δρ. Γιώργος της Μαρίας Παπαδόπουλος', {
  preserveOriginal: true,
  statistics: true,
  handleTitles: true,
  handleParticles: true
});
// → {
//     corrected: "Δρ. Γιώργος της Μαρίας Παπαδόπουλος",
//     statistics: {
//       length: 41,
//       originalLength: 41,
//       wordCount: 3,
//       hasParticles: true,
//       hasAccents: true,
//       hasDiaeresis: false,
//       isAllCaps: false,
//       isAllLower: false,
//       hasNumbers: false,
//       hasSpecialChars: false
//     }
//   }

API Reference

Main Function

GreekNameCorrection(input, options)

Parameters

  • input {string|string[]|Object|Object[]} - Name(s) to process

    • string: Single name
    • string[]: Array of names
    • Object: Single object with name property
    • Object[]: Array of objects with name property
  • options {Object} - Configuration options (all optional)

Options

| Option | Type | Default | Description | |--------|------|---------|-------------| | jsonKey | string | 'fullname' | Property name for input names in objects | | outputKey | string | 'correctedFullname' | Property name for corrected names in objects | | preserveOriginal | boolean | false | Return detailed object instead of string | | splitNames | boolean | true | Split and process name parts separately | | detectGender | boolean | false | Detect gender from name endings | | normalizeTonotics | boolean | true | Normalize Greek accent marks | | handleDiacritics | boolean | true | Properly handle Greek diacritics | | strictMode | boolean | false | Strict Greek character validation | | removeExtraSpaces | boolean | true | Remove extra whitespace | | handleParticles | boolean | true | Handle Greek particles (του/της/των) | | convertToGenitive | boolean | false | Convert to genitive case | | convertToCase | string\|null | null | Convert to case: 'vocative' or 'accusative' | | transliterate | string\|null | null | Transliteration mode: 'greeklish-to-greek', 'greek-to-latin', 'greek-to-greeklish' | | detectDiminutive | boolean | false | Detect diminutive/nickname forms | | handleTitles | boolean | true | Extract and format titles | | addGeneralTitle | boolean | false | Automatically add general title (κ. for men, κα for women) if no title exists (always lowercase) | | suggestCorrections | boolean | false | Suggest corrections for misspellings | | recognizeKatharevousa | boolean | false | Convert archaic Greek forms | | databaseSafe | boolean | false | Remove problematic characters | | generateSortKey | boolean | false | Generate accent-free sort key | | statistics | boolean | false | Generate name statistics |

Return Value

Returns the same type as input:

  • stringstring (or Object if preserveOriginal: true)
  • string[]string[] (or Object[] if preserveOriginal: true)
  • ObjectObject (with added corrected name property)
  • Object[]Object[] (with added corrected name properties)

When preserveOriginal: true, returns an object with:

{
  corrected: string,        // Corrected name
  original: string,         // Original input
  isValid: boolean,         // Validation result
  title?: string,           // Extracted title (if handleTitles)
  gender?: string,          // Detected gender (if detectGender)
  parts?: Object,           // Name parts (if splitNames)
  diminutive?: Array,       // Diminutive info (if detectDiminutive)
  genitive?: string,        // Genitive form (if convertToGenitive)
  vocative?: string,        // Vocative form (if convertToCase: 'vocative')
  accusative?: string,      // Accusative form (if convertToCase: 'accusative')
  sortKey?: string,         // Sort key (if generateSortKey)
  statistics?: Object,      // Name statistics (if statistics)
  wasCorrected?: boolean,   // If corrections were applied
  suggestedCorrection?: string  // Suggested correction
}

Supported Greek Titles

The library recognizes and properly formats the following Greek titles:

  • General: Κος, Κα, Δις, Κυρ, Κυρία, Κύριος, Δεσποινίς
  • Academic: Δρ, Καθ, Καθηγητής, Καθηγήτρια
  • Political: Πρωθυπουργός, Υπουργός, Βουλευτής, Δήμαρχος, Περιφερειάρχης
  • Religious: Αρχιεπίσκοπος, Μητροπολίτης, Επίσκοπος, Πατήρ
  • Military: Στρατηγός, Ταξίαρχος, Συνταγματάρχης, Αντισυνταγματάρχης

Automatic General Title Addition

When addGeneralTitle: true is enabled, the library automatically adds general titles based on detected gender:

  • κ. (κύριος) for male names
  • κα (κυρία) for female names

Note: General titles are always added in lowercase format. This feature only adds titles when no existing title is detected, ensuring that professional or academic titles are preserved.

Common Name Corrections

The library automatically corrects common Greek name misspellings:

| Misspelling | Correction | |-------------|------------| | γιοργος | γιώργος | | δημητρης | δημήτρης | | νικος | νίκος | | μαρια | μαρία | | ελενη | ελένη | | κωνσταντινος | κωνσταντίνος | | ιωαννης | ιωάννης | | And many more... | |

Transliteration Tables

Greeklish to Greek

The library uses intelligent multi-character pattern matching:

  • thθ
  • chχ
  • psψ
  • ouου
  • aiαι
  • eiει
  • mpμπ
  • ntντ
  • gkγκ
  • And all single characters...

Greek to Latin/Greeklish

Full support for all Greek characters including accented vowels and diaeresis.

Advanced Usage

Complete Name Processing Pipeline

const result = GreekNameCorrection('dr giorgos tou papa', {
  transliterate: 'greeklish-to-greek',
  preserveOriginal: true,
  handleTitles: true,
  addGeneralTitle: true,
  handleParticles: true,
  suggestCorrections: true,
  detectGender: true,
  convertToGenitive: true,
  generateSortKey: true,
  statistics: true,
  detectDiminutive: true,
  databaseSafe: true
});

console.log(result);
// Complete analysis with all features enabled

Batch Processing with Custom Keys

const employees = [
  { empId: 1, employeeName: 'giorgos papadopoulos', dept: 'IT' },
  { empId: 2, employeeName: 'maria konstantinou', dept: 'HR' }
];

const processed = GreekNameCorrection(employees, {
  jsonKey: 'employeeName',
  outputKey: 'greekName',
  transliterate: 'greeklish-to-greek',
  detectGender: true,
  preserveOriginal: true
});

Database Integration Example

// For SQL Server / PostgreSQL
const safeName = GreekNameCorrection(userInput, {
  databaseSafe: true,
  removeExtraSpaces: true,
  strictMode: true
});

// For sorting queries
const { corrected, sortKey } = GreekNameCorrection(name, {
  preserveOriginal: true,
  generateSortKey: true
});

// INSERT INTO users (name, name_sort) VALUES (?, ?)
// [corrected, sortKey]

Use Cases

1. Form Validation & Correction

app.post('/register', (req, res) => {
  const corrected = GreekNameCorrection(req.body.fullname, {
    suggestCorrections: true,
    handleTitles: true,
    databaseSafe: true
  });
  // Save corrected name to database
});

2. Import/Export Systems

// Convert Greeklish to Greek during import
const greekNames = csvData.map(row => 
  GreekNameCorrection(row.name, {
    transliterate: 'greeklish-to-greek'
  })
);

// Convert to Latin for international systems
const latinNames = greekNames.map(name =>
  GreekNameCorrection(name, {
    transliterate: 'greek-to-latin'
  })
);

3. Search & Matching

// Generate search keys
const searchKey = GreekNameCorrection(searchTerm, {
  generateSortKey: true,
  preserveOriginal: true
}).sortKey;

// Search without accent sensitivity

4. Document Generation

// Generate formal documents with genitive forms
const recipient = GreekNameCorrection(name, {
  convertToGenitive: true,
  handleTitles: true,
  preserveOriginal: true
});

console.log(`Προς: ${recipient.genitive}`);

// Use vocative case for addressing someone
const addressee = GreekNameCorrection('Γιώργος Παπαδόπουλος', {
  convertToCase: 'vocative'
});

console.log(`Αγαπητέ ${addressee},`); // "Αγαπητέ Γιώργο Παπαδόπουλο,"

// Use accusative case for direct objects
const object = GreekNameCorrection('Δημήτρης Νικολάου', {
  convertToCase: 'accusative'
});

console.log(`Είδα τον ${object}`); // "Είδα τον Δημήτρη Νικολάου"

5. Gender-Based Processing

const person = GreekNameCorrection(name, {
  detectGender: true,
  preserveOriginal: true
});

const pronoun = person.gender === 'male' ? 'ο' : 'η';
console.log(`${pronoun} ${person.corrected}`);

Performance

  • Zero dependencies: No external packages required
  • Efficient: Processes thousands of names per second
  • Memory-friendly: Minimal memory footprint
  • Pure JavaScript: No native bindings

Browser Support

While designed for Node.js, the library can be bundled for browser use with tools like Webpack or Browserify.

TypeScript

TypeScript definitions can be added. Example:

declare function GreekNameCorrection(
  input: string | string[] | object | object[],
  options?: {
    jsonKey?: string;
    outputKey?: string;
    preserveOriginal?: boolean;
    // ... other options
  }
): string | string[] | object | object[];

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

Development

# Clone the repository
git clone https://github.com/sraftopo/greek-name-correction.git

# Install dependencies (none currently!)
npm install

# Run tests
npm test

Testing

npm test

The test suite covers:

  • Basic string correction
  • Array processing
  • Object processing
  • All transliteration modes
  • Case conversions (genitive, vocative, accusative)
  • Title handling
  • Automatic general title addition
  • Diminutive detection
  • Gender detection
  • Statistics generation
  • Edge cases and error handling

Changelog

Version 2.1.2 (Current)

  • 🐛 Bug Fix - Fixed splitNameParts to correctly filter out general titles (κ. and κα) from name parts

Version 2.1.1

  • Automatic General Title Addition - Added addGeneralTitle option to automatically add general titles (κ. for men, κα for women) when no title exists

Version 2.1.0

  • 🏗️ Modular Architecture - Complete codebase refactoring into logical modules
  • 📦 Improved Structure - Separated into transliteration.js, cases.js, validation.js, utils.js, constants.js
  • 🔧 Better Maintainability - Clean separation of concerns for easier testing and development
  • Enhanced Code Organization - Each module has a single, clear responsibility

Version 2.0.0

  • ✨ Added transliteration support (Greeklish ↔ Greek ↔ Latin)
  • ✨ Added case conversion (genitive, vocative, accusative)
  • ✨ Added diminutive detection
  • ✨ Added title/honorific support
  • ✨ Added name correction suggestions
  • ✨ Added Katharevousa recognition
  • ✨ Added database-safe output
  • ✨ Added sort key generation
  • ✨ Added comprehensive statistics
  • 🐛 Improved accent normalization
  • 🐛 Better particle handling

Version 1.0.0

  • 🎉 Initial release
  • ✅ Basic name correction
  • ✅ Gender detection
  • ✅ Name part splitting
  • ✅ Validation

License

MIT © Stavros

Support

For bugs, questions, and discussions please use the GitHub Issues.

Acknowledgments

Built with ❤️ for the Greek developer community.

Special thanks to all contributors and users who help improve this library.

Related Projects


Made in Greece 🇬🇷

If you find this library helpful, please consider giving it a ⭐️ on GitHub!