Лучший подход для определения имени и фамилии из текстового блоба - PullRequest
4 голосов
/ 20 ноября 2011

Я работаю над программой, которая выполняет OCR на визитной карточке США и пытается вернуть такую ​​информацию, как имя, фамилия и т. Д. Задача состоит в том, как это сделать.

Пока что я 'Мы создали следующие файлы данных:

first_names.txt  (Contains 23k+ first names)
last_names.txt (Contains 86k+ last names)
job_title.txt (Contains 500+ job titles)
us_cities.txt (Contains 10k+ us cities)
states_full.txt (Contains full names of all US states)
states_abv.txt  (Contains all US state abbreviations)

Цель состояла в том, чтобы я разбил данные OCR на пробелы и попытался присвоить «вес» каждой строке на основе вероятности того, что это определенный тип данных.,

Например, строка в начале текстового блога, скорее всего, будет именем, компанией или названием.Аналогично, если строка найдена в first_names.txt или last_names.txt, то она будет иметь больший вес по отношению к имени / фамилии.

Этот подход звучит хорошо в теории, но мне интересно, как лучшеподойти к нему с точки зрения программирования.(PHP, не тот язык имеет значение) Сложность в том, что вес некоторых токенов относительно других токенов.Например:

  • Если токен, скорее всего, является именем, то следующий токен может быть фамилией.
  • Некоторые токены связаны друг с другом,но если вещи взрываются пробелами, я не уверен, как их связать.Например, «Anne Marie, FL» можно считать тремя токенами - «Anne», «Marie» и «FL».Хуже того, «Энн» и «Мари» наберут вес, став первым именем.Теперь, если вес также присваивается на основе позиции, предыдущая строка с именем имени может выиграть, освобождая эти строки, чтобы их можно было определить как город.

Я знаю, что там много умных людейтак что, возможно, у кого-то есть идея на этот счет!

1 Ответ

3 голосов
/ 20 декабря 2011

Полезно знать исключения (например, город под названием Мэри Сью), но конечные пользователи должны быть довольны, если ваше программное обеспечение может обработать наиболее вероятные случаи. Имена могут быть отсортированы по относительной частоте встречаемости в каждой категории: личное имя, название компании, название города. Для компаний число сотрудников может использоваться для расчета относительной вероятности. Для городов, населения.

У вас уже есть правила для проверки относительного положения строки, содержащей каждый токен?

Конечно, существует довольно много форматов визитных карточек, но если у вас есть несколько сотен образцов визитных карточек, вы сможете определить некоторые общие правила форматирования. Наличие всего лишь нескольких правил может очень помочь. Одно из правил может заключаться в том, что «80% всех карточек имеют адрес под личным именем и названием компании», хотя образец визитных карточек может не полностью отражать все возможные визитные карточки, все языки и т. Д. И т. Д., Это Начните. Даже несколько правил 50% и 80% могут упростить вашу задачу.

Вы можете придумать несколько правил, используя нелепый пример.

John Smith
Chief Operating Officer
Acme Inc.
123 Main Street
Somewhere, XZ 01010

более вероятно, чем

Somewhere, XZ
01010
John Smith
Acme Inc.
Chief Operating Officer
123 Main Street

Это говорит о том, что мы можем рассмотреть относительную Y-позицию личных имен и названий компаний относительно почтовых индексов. Хотя личное имя, должность и название компании могут следовать в любом из нескольких заказов, почтовые индексы, вероятно, будут находиться под названиями компаний. Почтовые коды будут ближе к названиям городов и т. Д.

Хотя такое слово, как «Саманта», может быть частью личного имени, названия улицы или названия компании, это, скорее всего, имя человека. Вы должны быть в состоянии найти базы данных, которые перечисляют относительную частоту имен при рождении, население городов с названием «Саманта» и количество зарегистрированных корпораций с именем «Саманта». Даже частичные базы данных были бы полезны для установления разумных предположений вероятности.

Другие возможные правила:

  • Сочетание букв и цифр 5 - 7 цифр в конце строки (для текста слева направо) или в отдельной строке может представлять собой почтовый индекс.
  • "Inc", "Ltd", "Corp" и другие сокращения должны увеличить вероятность того, что строка будет определена как название компании
  • Личное имя может быть расположено над заголовком. (Может быть, 85% - 95% времени?)
  • Номера телефонов следуют несколько ограниченному числу шаблонов и, как правило, включают символы, которых нет в почтовых индексах: "(" ")" "."
  • Веб-сайты следуют общим шаблонам. Даже если есть кто-то, чье официальное имя CarolGreen.com, она, вероятно, не удивится, если ее имя будет признано веб-сайтом.
  • Символ "@" почти наверняка является частью адреса электронной почты. Адрес электронной почты, вероятно, расположен в какой-то строке под именем человека, при условии, что адрес электронной почты вообще отображается.
  • Некоторая информация может отсутствовать. Карта может не указывать веб-сайт. Там может быть номер телефона, но не адрес улицы. Человек может не иметь названия. Личная визитная карточка может не иметь названия компании. Скорее всего, хотя бы одна строка будет персональным именем.
...