Извлечение структурированных данных из полуструктурированных данных

Вопрос или проблема

Я хочу использовать машинное обучение и обработку естественного языка (NLP), чтобы преобразовать полуструктурированные данные в текстовых файлах в структурированные данные, предсказывая паттерны в файлах и разбивая поля. Например, если у меня есть текстовый файл, который выглядит следующим образом:

Входные данные:

2021565267MALL1ETAGE ZARA1st FLOOR 2345561
2022565267MALL2ETAGE ZARA1st FLOOR 2345561
2022565267ANFAPLACE2ETAGECOFEESHOP2345561
20225652634ANFAPLACE2ETAGE 2345561

Желаемый выход:

2021565267,MALL1ETAGE ZARA1st FLOOR,2345561
2022565267,MALL2ETAGE ZARA1st FLOOR,2345561
2022565267,ANFAPLACE2ETAGECOFEESHOP,2345561
20225652634,ANFAPLACE2ETAGE,2345561

Полуструктурированные файлы имеют непостоянную ширину, поэтому мы не можем просто добавить спецификацию колонн в pandas следующим образом (это может сработать для первой строки, например):

col_specification =[(1, 10),.... ]

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

Я делаю следующие предположения:

  1. Первый столбец с числами – это первые несколько цифр/чисел в каждой строке.
  2. Последний столбец с числами – это последние несколько цифр/чисел в каждой строке.
  3. Таким образом, во втором столбце такие тексты, как MALL1ETAGE ZARA1st FLOOR, не должны содержать чисел в начале или в конце. Таким образом, 20215652671MALL1ETAGE ZARA1st FLOOR 2345561 будет интерпретироваться как 20215652671, MALL1ETAGE ZARA1st FLOOR, 2345561, а не как 2021565267, 1MALL1ETAGE ZARA1st FLOOR, 2345561.

С этой целью вы можете использовать следующее, что использует регулярное выражение для захвата первой и последней группы чисел:

import re

re.findall("^([0-9]+)(.*?)([0-9]+)$", "2021565267MALL1ETAGE ZARA1st FLOOR 2345561")
# [('2021565267', 'MALL1ETAGE ZARA1st FLOOR ', '2345561')]

Применение strip() к каждому из результатов удаляет пробелы в конце и позволяет получить желаемый выход.

Ответ или решение

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

Подход к задаче

  1. Анализ данных: Мы понимаем, что каждая строка содержит набор данных, где:

    • Первая часть — это последовательность цифр.
    • Вторая часть — текст, содержащий пробелы и буквы, но без цифр в начале или конце.
    • Последняя часть — это опять последовательность цифр.
  2. Регулярное выражение: Мы будем использовать регулярные выражения для захвата трех групп данных.

Реализация

Вот пример реализации на Python:

import re

# Исходные данные
data = [
    "2021565267MALL1ETAGE ZARA1st FLOOR 2345561",
    "2022565267MALL2ETAGE ZARA1st FLOOR 2345561",
    "2022565267ANFAPLACE2ETAGECOFEESHOP2345561",
    "20225652634ANFAPLACE2ETAGE 2345561"
]

# Шаблон регулярного выражения
pattern = r"^([0-9]+)(.*?)([0-9]+)$"

# Функция для обработки и извлечения данных
def extract_data(lines):
    extracted_data = []
    for line in lines:
        match = re.findall(pattern, line)
        if match:
            # Получаем первую, вторую и третью части
            first_column = match[0][0].strip()
            second_column = match[0][1].strip()
            third_column = match[0][2].strip()
            # Формируем результат в нужном формате
            extracted_data.append(f"{first_column},{second_column},{third_column}")
    return extracted_data

# Вызываем функцию и выводим результат
structured_data = extract_data(data)
for row in structured_data:
    print(row)

Объяснение кода

  1. Импорт библиотеки: Мы импортируем библиотеку re, которая предоставляет поддержку регулярных выражений.
  2. Исходные данные: Создаем список data, в который помещаем строки полуструктурированных данных.
  3. Шаблон регулярного выражения: Используем шаблон ^([0-9]+)(.*?)([0-9]+)$, где:
    • ^([0-9]+) — захватывает первую часть (последовательность цифр) на начале строки.
    • (.*?) — захватывает середину строки (текст), которая не содержит цифр в начале или конце.
    • ([0-9]+)$ — захватывает последнюю часть (последовательность цифр) в конце строки.
  4. Функция extract_data: Эта функция принимает список строк, применяет регулярное выражение и выбирает соответствующие части, убирая лишние пробелы.
  5. Вывод результата: Итоги выводятся в нужном формате.

Заключение

Данное решение позволит вам эффективно извлекать структурированные данные из полуструктурированных текстов, используя регулярные выражения. Если у вас есть дополнительные вопросы или нужна помощь с другими аспектами, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...