Алгоритмы для разделения личных имен на части

StackOverflow https://stackoverflow.com/questions/1633883

  •  06-07-2019
  •  | 
  •  

Вопрос

Я ищу ссылки на разделение имени:"Джон А.Доу" по частям, первый = Джон, средний = А., последний = Доу.В Мексике у нас есть отцовские, материнские, первые и вторые данные имена, и они могут быть написаны в разных вариантах, так что проблема довольно сложная.

Поскольку это зависит от данных, мы работаем с соответствующим программным обеспечением, которое вычисляет оценку для каждого слова, чтобы мы могли принимать решения (оно основано на большой базе данных).Входные данные не являются чистыми, они импортированы с некоторых правительственных веб-страниц и отфильтрованы человеком, поэтому в них может содержаться мусор, который также необходимо распознать.Есть какие-нибудь предложения?

[Править] Примеры:

name:
   Javier Abdul Córdoba Gándara
common permutations (or as it may appear in gvt data referring to same person):
   Córdoba Gándara Javier Abdul
   Javier A. Córdoba Gándara
   Javier Abdul Córdoba G.

paternal=Córdoba
maternal=Gándara
first given:Javier
second given:Abdul
name: María de la Luz Sánchez Martínez
paternal:Sánchez
maternal: Martínez
first given: María de la Luz
name: Paloma Viridiana Alin Arias Medina
paternal: Arias
maternal: Medina
first given: Paloma
second given: Viridiana Alin

Как я уже сказал, значение каждого слова зависит от оценки.У человека нет никакого способа узнать это

Viridiana
и
Alin
даются имена, если не из партитуры.

У нас очень мощная база данных (около 80 миллионов записей), так что мы можем в некоторой степени использовать систему подсчета очков.Я разрабатываю какой-то алгоритм, который использует это, но ищу другие ссылки.

Это было полезно?

Решение

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

Что касается общего времени и усилий, затраченных на разработку этого алгоритма, я бы сказал, что время будет разделено примерно следующим образом:

  1. 10% для общих манипуляций со строками
  2. 30% за специфический характер данных (Форматы мексиканских названий, особенности ввода данных)
  3. 60% для обеспечения качества данных / их отсутствия качество

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

Несколько общих советов

  • Если они не требуются, удалите не буквенно-цифровые символы / пробелы
  • Разбить на пробелы
  • Используйте дефисы / знаки препинания для обозначения фамилий или родственных названий
  • Инициалы (которые являются в целом одиночные буквы) не являются фамилиями;т. е.они должны быть первыми / средними
  • определите уровень уверенности в том, что вы программно идентифицировали каждое имя (и тщательно протестируйте это).Вы можете обнаружить, что существуют подмножества данных, содержащие похожие шаблоны, которые необходимо обрабатывать индивидуально (они могут поступать из разных источников и т.д.).

Другие советы

Возможно, вам потребуется добавить какой-нибудь естественный язык или машинное обучение для проверки.Проблема идентификации имен авторов (например,в научных статьях) затруднительно, поскольку они могут быть представлены с различными порядками, степенями сокращения, пропусками и т.д.Если ваша база данных загрязнена, что бы вы ни делали, все закончится двусмысленностью.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top