Lingua::JA::Name::Splitter - split a Japanese name into given and family


    use utf8;
    use Lingua::JA::Name::Splitter 'split_kanji_name';
    my ($family, $given) = split_kanji_name ('風太郎');
    print ("$family $given\n");

produces output

    風 太郎

(This example is included as in the distribution.)


This documents Lingua::JA::Name::Splitter version 0.09 corresponding to git commit 6d4f8e9a4a14238d2f8f6df16b51bce9e952804d released on Sat Jul 29 12:54:55 2017 +0900.

This module is based on the "Enamdict" data released on 2017-01-28.


This module attempts to split the names of Japanese people into given and family names.



    my ($family, $given) = split_kanji_name ('渡辺純子');

Native Japanese writing does not use spaces, so names appear as a string of characters with no break. This function provides a "guesswork" solution for dealing with names. It is a rough guess based on a simple algorithm, and thus is suitable for those who need to deal with large numbers of names quickly. Its output is not reliable, and must be checked by a human.

The heuristic methods used are as follows. The first character is assumed to be the family name's, and the last character is assumed to be the given name's. When there are more than two characters in the name, hiragana are assumed part of the given name. Kanji characters are weighted by distance from the beginning of the name. A dictionary of probabilities of family or given name kanji is also used to weight some characters. The name is then split at the first character which seems more likely to be part of the given name.


    my ($first, $last) = split_romaji_name ($name);

Given a string containing a name of a Japanese person in romanized form, guess which part is the first and which part is the last name using the spaces, capitalization and commas in the name.

Japanese people write their names in a variety of romanized formats, such as "KATSU, Shintaro", "Shintaro Katsu", "KATSU Shintaro", or even "ShintaroKATSU". This function is intended as a "rock breaker" for processing a large number of Japanese names in romanized form. Its output needs to be checked by a human.

    use Lingua::JA::Name::Splitter 'split_romaji_name';
    for my $name ('KATSU, Shintaro', 'Risa Yoshiki') {
        my ($first, $last) = split_romaji_name ($name);
        print "$first $last\n";

produces output

    Shintaro Katsu
    Risa Yoshiki

(This example is included as in the distribution.)



Carp is used to report errors.


Lingua::JA::Moji is used to process Japanese characters and detect romanised Japanese.


Nothing is exported by default. "split_kanji_name" and "split_romaji_name" are exported on demand. An export tag :all exports both functions.

    use Lingua::JA::Name::Splitter ':all';


About Japanese names

For people who've stumbled upon this module by accident and wonder why anyone would need a Japanese name splitter, see the Sci.lang.japan FAQ on Japanese names or the Wikipedia page on Japanese names.


The Enamdict dictionary of name data used by the module is a project of the Electronic Dictionary Research and Development Group (EDRDG). Please see ENAMDICT/JMnedict Japanese Proper Names Dictionary Files for full details.

Build scripts

The following build scripts are used by the module.

The script which makes the dictionary,, is in the module's repository, but it is not provided in the distribution itself. The script counts the number of failed matches with Enamdict. The script is used to compute a probability factor used in the module. The module handles reading and parsing Enamdict.


Ben Bullock, <>


This package and associated files are copyright (C) 2012-2017 Ben Bullock.

You can use, copy, modify and redistribute this package and associated files under the Perl Artistic Licence or the GNU General Public Licence.