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

Потяните объекты, что Вы хотите быть в назад немного позади объектов, что Вы хотите быть в передней стороне. Таким образом, на самом деле изменитесь, значение z (принимающий z перпендикулярно экранной плоскости). Вы не должны изменять его много, чтобы заставить объекты тянуть друг перед другом. И если Вы только изменяете значение z немного, Вы не должны замечать большую часть смещения от их желаемого положения. Вы могли даже пойти действительно необычные, и вычислить корректный x, y положение на основе сменившего z положения, так, чтобы объект появился, где это, как предполагается, находится.

6
задан Scott Saunders 7 August 2009 в 15:40
поделиться

3 ответа

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

Для такого типа задач я бы использовал pyparsing, поскольку он обладает мощностью полного анализатора lr, но без трудностей. граммер для определения и очень хорошие вспомогательные функции. Код также легко читается.

from pyparsing import *

aaa ="""    This is example text that could be many lines long...
             another line

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

    stuff in here you want to ignore

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

result = SkipTo("Location").suppress() \  
# in place of "location" could be any type of match like a re.
         + OneOrMore(Word(alphas) + Word(nums)) \
         + OneOrMore(Word(nums+"$.")) \

all_results = OneOrMore(Group(result))

parsed = all_results.parseString(aaa)

for block in parsed:
    print block

Это возвращает список списков.

['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']

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

Я не знаю, есть ли эквиваленты в других языках.

7
ответ дан 17 December 2019 в 00:12
поделиться

Вы дали два образца шаблонов для текстовых файлов.
Я думаю, что с этим можно справиться с помощью скриптов.
Что-то вроде: AWK, sed, grep со сценарием bash.


Один шаблон в первом примере,

  1. Раздел начинается с ключевого слова Местоположение [Число]
    • вторая строка раздела содержит столбцы с описанием названий продуктов.
    • третья строка раздела содержит столбцы с ценами на продукты

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


Собранные данные, вероятно, будут ассимилированы в базе данных.

0
ответ дан 17 December 2019 в 00:12
поделиться

Я знаю, что я бы использовал здесь только регулярные выражения. Три или четыре выражения могут управлять логикой синтаксического анализа для каждого формата электронной почты.

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

0
ответ дан 17 December 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: