Алгоритмы или шаблоны для чтения текста

У моей компании есть клиент, который отслеживает цены на товары разных компаний в разных местах. Эта информация попадает в базу данных.

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

Некоторые выглядят примерно так:

    This is example text that could be many lines long...

    Location 1
    Product 1     Product 2     Product 3
    $20.99        $21.99        $33.79

    Location 2
    Product 1     Product 2     Product 3
    $24.99        $22.88        $35.59

Другие выглядят примерно так:

    PRODUCT       PRICE    + / -
    ------------  -------- -------
    Location 1
    1             2007.30 +048.20
    2             2022.50 +048.20

    Maybe some multiline text here about a holiday or something...

    Location 2
    1             2017.30 +048.20
    2             2032.50 +048.20

В настоящее время у нас есть отдельные парсеры, написанные для каждой компании.формат электронной почты. Но эти форматы меняются довольно часто. Мы можем'не рассчитывайте, что цены будут находиться в одной строке или столбце каждый раз.

Это'Для нас тривиально посмотреть на электронные письма и определить, какая цена идет с каким продуктом и в каком месте. Но не так много для нашего кода. Так что я'Я пытаюсь найти более гибкое решение и хотел бы получить ваши предложения о том, какие подходы выбрать. Я'я открыт для всего, от регулярных выражений до нейронных сетей - яя узнаю, что мне нужно, чтобы сделать эту работу, я просто нене знаю, что мне нужно учиться. Это проблема lex / разбора? Больше похоже на OCR?

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

Спасибо за любые предложения о том, с чего начать.

Ответы на вопрос(3)

Ваш ответ на вопрос