Разбор полного имени в составляющие - PullRequest
5 голосов
/ 08 апреля 2011

Нам нужно разработать внутреннее приложение, которое может разобрать полное имя в

Prefix (Dr. Mr. Ms. etc)
First Name
Last Name
Middle Name
etc

Проблема здесь заключается в том, что он должен поддерживать названия нескольких стран и языков. Одно из предположений, которое у нас есть, это то, что мы всегда будем указывать страну и язык вместе с полным именем в качестве ввода.

Полное имя может быть в любом формате. Для одной и той же комбинации страна / язык может указываться имя, фамилия или наоборот. Запятая не будет частью полного имени.

Возможно ли это? Мы также открыты для любого имеющегося в продаже программного обеспечения.

Ответы [ 9 ]

8 голосов
/ 18 июля 2011

Поскольку ОП была открыта для любого коммерчески доступного предложения ...

«IBM InfoSphere Global Name Analytics» представляется коммерческим решением, удовлетворяющим первоначальному запросу на разбор [неструктурированного] личного имени [полное имя]; очевидно, с определенной степенью уверенности в отношении решения некоторых проблем двусмысленности имен, на которые ссылаются другие ответы.
Примечание: у меня нет личного опыта или связи с продуктом, я просто столкнулся с этим обсуждением и следующими ссылочными ссылками, пока провести повторное расследование по той же проблеме, что и описанная ФП. НТН.

Ссылка на общую документацию по продукту:
http://publib.boulder.ibm.com/infocenter/gnrgna/v4r1m0/topic/com.ibm.gnr.gna.ic.doc/topics/gnr_gna_con_gnaoverview.html

См. «Разбор имен с использованием NameParser» по адресу
. http://publib.boulder.ibm.com/infocenter/gnrgna/v4r1m0/topic/com.ibm.gnr.gna.ic.doc/topics/gnr_np_con_parsingnamesusingnameparser.html

NameParser - это API-интерфейс компонента для продукта на
http://publib.boulder.ibm.com/infocenter/gnrgna/v4r1m0/topic/com.ibm.gnr.gna.ic.doc/topics/gnr_gnm_con_logicalarchitecturecapis.html

См. "Разбор имен с использованием IBM NameWorks" в
http://publib.boulder.ibm.com/infocenter/gnrgna/v4r1m0/topic/com.ibm.gnr.gna.ic.doc/topics/gnr_gnm_con_parsingnamesusingnameworks.html

«IBM NameWorks объединяет отдельные компоненты IBM InfoSphere Global Name Recognition в единый, унифицированный, простой в использовании интерфейс прикладного программирования (API), а также расширяет эту функциональность для приложений Java и в качестве веб-службы»

http://publib.boulder.ibm.com/infocenter/gnrgna/v4r1m0/topic/com.ibm.gnr.gna.ic.doc/topics/gnr_gnm_con_logicalarchitecturenwapis.html

Чтобы прояснить, почему я думаю, что это отвечает на вопрос, смягчая некоторые из ранее упомянутых трудностей в выполнении задачи ... Если я правильно понял прочитанное, API используют "сервер NameHunter" для поиска в "IBM InfoSphere Global Архив данных об именах (NDA) », который описывается как« коллекция из почти одного миллиарда имен со всего мира, а также пол и страна ассоциации для каждого имени. Этот большой репозиторий информации об именах поддерживает алгоритмы и правила, которые IBM InfoSphere Global Продукты для распознавания имен используются для классификации, классификации, анализа, сопоставления и сопоставления имен. "

FWiW Я также наткнулся на «анализатор имен», который использует базу данных с ~ 140K именами, как указано в:
http://www.melissadata.com/dqt/websmart-web-services.htm

7 голосов
/ 08 апреля 2011

Я думаю, что это невозможно. Рассмотрим Ральфа Вогана Уильямса. Его фамилия "Вон Уильямс" и его имя "Ральф". Сравните это с Чарльзом Вильерсом Стэнфордом, чья фамилия "Стэнфорд", с именем "Чарльз" и отчеством "Вильерс".

Оба являются англоязычными композиторами из Англии, поэтому информации о стране и языке недостаточно для установления правильной логики синтаксического анализа.

2 голосов
/ 27 мая 2015

Базовый алгоритм может делать следующее:

  • Сначала посмотрите, начинается ли входящая строка с заголовка, такого как Mrs, и удалите его, если это так, сверяя с фиксированным списком заголовков.
  • Если остается один пробел и точно один пробел, предположим, что первое слово - это имя, а второе - фамилия (что иногда будет неверно)

Чтобы выйти за рамки этого, потребовалось бы много работы, см. Как разобрать полные имена , чтобы определить пути улучшения, и посмотреть в этих документах IBM для дальнейших подсказок по реализации

2 голосов
/ 26 мая 2014

Я написал простой синтаксический анализатор имен людей в javascript как модуль npm:

https://www.npmjs.org/package/humanparser

humanparser

Разобрать строку имени человека в приветствие, имя,отчество, фамилия, суффикс.

Установить

npm install humanparser

Использование

var human = require('humanparser');

var fullName = 'Mr. William R. Jenkins, III'
    , attrs = human.parseName(fullName);

console.log(attrs);

//produces the following output

{ saluation: 'Mr.',
  firstName: 'William',
  suffix: 'III',
  lastName: 'Jenkins',
  middleName: 'R.',
  fullName: 'Mr. William R. Jenkins, III' }
2 голосов
/ 30 ноября 2013

Вот две бесплатные библиотеки парсинга имен PHP для тех, у кого бюджет:

https://code.google.com/p/php-name-parser/

http://jasonpriem.org/human-name-parse/

А вот библиотека Javasript в пакете Nodeменеджер:

https://npmjs.org/package/name-parser

2 голосов
/ 08 апреля 2011

Единственный разумный подход состоит в том, чтобы избежать необходимости делать это в первую очередь. Наиболее очевидный (и распространенный) способ сделать это состоит в том, чтобы пользователь вводил заголовок, имя / имя, фамилию / фамилию, суффикс и т. Д. Отдельно друг от друга, а не пытался проанализировать их из одного строка.

1 голос
/ 15 апреля 2011

Как объяснили другие, проблема не решаема.Лучший подход, который я могу придумать для хранения имен, - это сохранение полного имени с последующим смещением начала (и, возможно, также окончания) в «первичное подполе сопоставления», которое мог указать человек, вводящий имя, выделив его или что-то подобное.Например,

Джон Роберт Миллер , мл.

, где жирным шрифтом обозначено то, что было помечено как "основное подполе сопоставления".Этот диапазон затем будет перемещен в начало строки при генерации ключа сортировки.

Конечно, одного этого подхода может быть недостаточно, если вы также хотите поддерживать заголовки (и игнорировать их в целях сопоставления)..

1 голос
/ 08 апреля 2011

Задайте себе вопрос: действительно ли вам нужно различные части имени?Синтаксический анализ имен по своей сути невозможен, так как разные культуры используют разные соглашения (например, «второе имя» является типичным для США), и некоторый небольшой процент имен будет всегда рассматриваться неправильно.

Гораздо предпочтительнее рассматривать имя как «атомарную» неразделимую сущность.

1 голос
/ 08 апреля 2011

"Эштон Джордан" "Джордан Эштон" - ты не можешь сказать, какая фамилия, а какая имя.Также у людей в Южной Индии, очевидно, нет фамилии.То же самое с шерпами в Гималаях.

Но, скажем, у вас есть огромный список всех фамилий (которые никогда не используются в качестве имен), тогда, возможно, вы можете использовать это для идентификации других частей имени (Приветствия / Дано/ Middle / Jr / Sr / I / II / ...) И если есть двусмысленность, ваш синтаксический анализатор имен может запросить человеческий вклад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...