Вопрос или проблема
Существует ли какой-либо стандартный инструмент, библиотека или список для расширения сокращений названий городов? Например, “MT HOLLY” -> “MOUNT HOLLY” или “ST MICHAELS” -> “SAINT MICHAELS”?
У меня есть два набора данных, содержащие названия городов США, и я пытаюсь сопоставить их, но эти несоответствующие системы наименования затрудняют задачу. Мне даже трудно найти список всех известных сокращений.
Возможно, вы могли бы взять набор данных с полными названиями, выделить многословные и использовать первые слова для генерации сокращений самостоятельно. Таким образом, у вас будет необходимое сопоставление. Однако могут возникнуть бессмысленные сокращения, которые вы получите таким образом. Поэтому отбрасывайте все такие сокращения, которые не имеют совпадений в наборе данных с сокращенными названиями городов. Любые потенциальные дубликаты вам придется разрешать самостоятельно, так же как и те сокращения из второго набора данных, которые не нашли соответствия.
Мне даже трудно найти список всех известных сокращений.
Что ж, это не имеет значения для вас, так как у вас уже есть список соответствующих сокращений, встречающихся в вашем наборе данных.
Почтовая служба США ведет список почтовых индексов и действительных адресов, плюс стандарты, такие как действительные сокращения. Существует целая индустрия, направленная на ответ на вопрос “является ли адрес на этом письме доставляемым адресом?”, для эффективной массовой рассылки с минимальным количеством возвращаемых предметов.
Бюро переписи населения США ведет список CDP, обозначенных мест переписи. Похоже, что он довольно близко соответствует набору действительных почтовых пунктов назначения, что, я полагаю, вас и интересует.
В python вы можете удобно получить к нему доступ с помощью import uszipcode. Он использует внутреннюю базу данных sqlite, так что вы можете выдавать запросы SELECT … ORDER BY до своего удовольствия.
Некоторые почтовые отделения США используют модифицированные адресные соглашения, такие как в Пуэрто-Рико, но, возможно, ваш случай использования касается только пятидесяти штатов плюс Округ Колумбия.
При столкновении с именами с дефисами вам может быть удобно превратить -
дефис в ПРОБЕЛ, получая пару слов.
Оказалось, что названия городов США, к счастью, короткие. Четыре слова, кажется, максимум, например, Carmel By The Sea в Калифорнии.
У вас есть канонический список имен мест, и у вас также есть более одного “грязного” набора данных, которые включают сокращенные имена. Канонизируйте все имена, преобразовывая их в верхний регистр. Давайте сосредоточимся на сокращенном первом слове, таком как “MT”.
Составьте список канонических имен, упорядоченный по второму слову (с первым словом для разрешения равенства). Составьте список потенциально сокращенных имен, упорядоченный таким же образом. Выполните двустороннее слияние этих списков.
Многие из результатов будут точными совпадениями, которые не представляют интереса и могут быть проигнорированы. Результаты, которые остаются после этого фильтра, соответствуют сокращениям или опечаткам, удобно упорядоченным для вас в сортированном порядке. Либо просмотрите их, чтобы составить список сокращений, либо используйте программу или модель NLP, чтобы сделать это за вас. Составьте “дообработанный” выходной список имен, который теперь частично канонизирован.
Теперь повторите для других позиций слов. На самом деле, решение проблемы “последнего слова” может быть самым простым и очевидным решением, которое осталось, поскольку муниципалитеты Нью-Джерси часто называются TWNSHP, TSHP, TWP и другими забавными вариантами.
Опубликуйте здесь URL вашего результирующего репозитория GitHub в качестве ответа.
Ответ или решение
Как конвертировать сокращения названий городов: практический подход
В процессе работы с большими наборами данных по названиям городов США часто возникает необходимость стандартизировать названия, особенно когда они представлены в сокращенной форме. Это может вызвать затруднения при сопоставлении данных. В этой статье мы рассмотрим методы конвертации сокращений названий городов, предоставляя полезные инструменты и ресурсы для упрощения этой задачи.
1. Поиск стандартных ресурсов
Для начала стоит отметить, что официальные организации, такие как Почтовая служба США (USPS) и Бюро переписи населения США, предлагают ценные ресурсы. Они поддерживают списки действующих сокращений и полных названий городов, которые могут служить отличной основой для вашей работы.
- Почтовые сокращения: Посмотрите материалы USC по стандартам аббревиатур, которые могут помочь в унификации названий.
- Списки населенных пунктов: Бюро переписи населения предлагает списки Census Designated Places (CDPs), которые представлены в рамках анализа данных о населенных пунктах.
2. Построение собственного словаря сокращений
Если у вас уже есть наборы данных с сокращёнными названиями городов, вы можете создать собственный словарь. Для этого выполните следующие шаги:
- Сканируйте ваши данные на предмет сокращений.
- Создайте список полных названий и соответствующих сокращений. Например, для "MT HOLLY" должно быть соответствующее "MOUNT HOLLY".
- Если в данных есть гипенированные названия, преобразуйте их так, чтобы тире были заменены на пробелы, что позволит вам легче обрабатывать их.
import pandas as pd
# Например, загрузим ваши данные
data = pd.read_csv('town_names.csv')
# Преобразуем названия и создадим маппинг сокращений
data['canonical_name'] = data['town_name'].str.upper().str.replace('-', ' ')
3. Сопоставление названий
Чтобы эффективно сопоставить названия в ваших наборах данных, используйте метод слияния:
- Форматирование и нормализация названий: Приведите все названия к верхнему регистру для устранения незначительных различий.
- Сортировка: Сортируйте оба списка по первому и второму словам, чтобы упростить поиск совпадений.
- Двустороннее слияние: Используйте алгоритм слияния (например, k-way merge) для сравнительного анализа ваших списков.
# Пример кода для слияния
merged_data = pd.merge(canonical_data, abbreviated_data, on=['first_word', 'second_word'], how='inner')
4. Обработка результатов
После объединения данных:
- Игнорируйте записи, которые идеально совпадают.
- Сосредоточьтесь на результатах, которые не совпадают. Это поможет вам выявить потенциальные сокращения или опечатки, которые могут потребовать ручной проверки.
- Используйте алгоритмы NLP для автоматизации обработки, если объем данных позволяет это.
5. Финализируйте и публикуйте результаты
После завершения всех этапов вы получите список сокращений, который можно использовать для дальнейшей работы. Вы также можете создать репозиторий GitHub, где представите свои данные и результаты анализа, делая их доступными для других пользователей.
Заключение
Стандартизация городских названий и их сокращений может показаться сложной задачей, но предлагаемые методы помогут сделать процесс проще и эффективнее. Используя существующие ресурсы, создавая собственные словари и применяя алгоритмические методы, вы сможете добиться необходимого уровня унификации данных.