Парсит одни и те же данные из разных HTML структур - PullRequest
0 голосов
/ 19 апреля 2020

Я хочу разобрать квитанции, чтобы найти их общую сумму. Квитанции поступают как HTML. Но поступления поступают от разных компаний, поэтому имеют разные HTML структуры. Например, это может быть (это примеры из реальной жизни):

Компания 1: Внутренний интервал

<span style="font-size: small;">
  Amount: $17.85USD Status: Paid<br>Transaction #: 1<br>
</span>

Компания 2: один тр в таблице

<tr>
  <td style="height:17px; color:black;"><strong>Total</strong></td>
  <td style="text-align:right; color:black;"><strong>15.90€</strong></td>
</tr>

Компания 3: таблица внутри td из внешней таблицы

                 <td style="border: 0;border-collapse: collapse;margin: 0;padding: 0;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;width: 472px;">
                    <table style="border: 0;border-collapse: collapse;margin: 0;padding: 0;width: 100%;">
                      <tbody>
                      <tr>
                        <td style="border: 0;border-collapse: collapse;margin: 0;padding: 0;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;" valign="top">
                          <table style="border: 0;border-collapse: collapse;margin: 0;padding: 0;">
                            <tbody>
                            <tr>
                              <td style="border: 0;border-collapse: collapse;margin: 0;padding: 0;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Ubuntu, sans-serif;mso-line-height-rule: exactly;vertical-align: middle;color: #8898aa;font-size: 12px;line-height: 16px;white-space: nowrap;font-weight: bold;text-transform: uppercase;">
                                    Amount paid
                              </td>
                            </tr>
                            <tr>
                              <td style="border: 0;border-collapse: collapse;margin: 0;padding: 0;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Ubuntu, sans-serif;mso-line-height-rule: exactly;vertical-align: middle;color: #525f7f;font-size: 15px;line-height: 24px;white-space: nowrap;">
                                    £4.50
                              </td>
                            </tr>
                            </tbody>
                          </table>
                        </td>

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

  • Алгоритм с много жестко закодированных путей (tr, таблица в td, span, p, много if / thens), жесткое кодирование новых путей, когда мы находим новые возможности?
  • Подойдет ли здесь работа по машинному обучению?

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

1 Ответ

1 голос
/ 19 апреля 2020

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

Например, ^\$( )*\d*(.\d{1,2})?$ regex может найти суммы в $.

Какой язык вы используете? в php, preg_match() - функция, которая вам понадобится:)

...