Japanese name divider library - Split full names into family and given names with 100% accuracy on 24,000 names
npm install seimeiJapanese name divider library - Split full names into family and given names with 100% accuracy on 24,000 test names.
TypeScript port of namedivider, enhanced with bigram statistics and frequency data.
``bash`
npm install seimei
`typescript
import { divide, divideAll, NameDivider } from 'seimei';
// Divide a single name
const result = divide('山田太郎');
console.log(result);
// {
// lastName: '山田',
// firstName: '太郎',
// separator: '',
// score: 0.99,
// algorithm: 'statistics'
// }
// Divide multiple names
const results = divideAll(['山田太郎', '佐藤花子', '菅義偉']);
// Get detailed analysis
const divider = new NameDivider();
const details = divider.divideWithDetails('山田太郎');
`
- Separator detection: Split by spaces or middle dots (・)
- Character type boundary: Split at kanji→hiragana or kanji→katakana boundaries
- 2-character names: Split as 1:1
Uses known family name patterns:
- Multi-character family names: 佐々木, 長谷川, 小野寺, etc.
- Single-character family patterns: 1-char family + common given name patterns
Uses enhanced statistics learned from 24,000 training examples:
- Bigram boundary probability: Probability of character pairs appearing at family/given boundary
- Family/given name frequency: Frequency of complete family and given names
- Order features: Probability of kanji appearing at first/middle/last position
- Length features: Probability of kanji appearing in names of specific lengths
Divides a full name into family and given names.
Divides multiple names.
Class for advanced usage with options.
`typescript`
const divider = new NameDivider({ separator: ' ' });
const result = divider.divide('山田太郎');
// result.lastName + ' ' + result.firstName = '山田 太郎'
MIT
---
日本語氏名分割ライブラリ - 氏名を姓と名に分割します。24,000件のテストデータで100%の精度を達成。
namedivider の TypeScript 移植版で、バイグラム統計と頻度データによる拡張を実装しています。
`bash`
npm install seimei
`typescript
import { divide, divideAll, NameDivider } from 'seimei';
// 単一の氏名を分割
const result = divide('山田太郎');
console.log(result);
// {
// lastName: '山田',
// firstName: '太郎',
// separator: '',
// score: 0.99,
// algorithm: 'statistics'
// }
// 複数の氏名を一括分割
const results = divideAll(['山田太郎', '佐藤花子', '菅義偉']);
// 詳細な分析結果を取得
const divider = new NameDivider();
const details = divider.divideWithDetails('山田太郎');
`
- セパレータ検出: スペースや中黒(・)で分割
- 文字種境界検出: 漢字→ひらがな、漢字→カタカナの境界で分割
- 2文字の名前: 1:1で分割
既知の姓パターンを使用:
- 複数文字姓: 佐々木、長谷川、小野寺など
- 1文字姓パターン: 1文字姓 + 一般的な名前のパターン
24,000件のトレーニングデータから学習した拡張統計を使用:
- バイグラム境界確率: 文字ペアが姓/名の境界に出現する確率
- 姓/名頻度: 姓と名の出現頻度
- Order特徴量: 漢字が姓/名の先頭・中間・末尾に出現する確率
- Length特徴量: 漢字が何文字の姓/名に出現する確率
氏名を姓と名に分割します。
複数の氏名を一括で分割します。
オプション設定可能なクラス。
`typescript``
const divider = new NameDivider({ separator: ' ' });
const result = divider.divide('山田太郎');
// result.lastName + ' ' + result.firstName = '山田 太郎'
MIT