python — pyparsing — определение ключевых слов — сравнение Literal, Word, Keyword и Combine
Вот некоторый тестовый код для сравнения выражений pyparsing.
из импорта pyparsing * functor1 = Литерал ('a') | Литерал('b') | Буквальный ('c') functor2 = Word('a') | Слово('б') | Слово ('с') functor3 = Ключевое слово ('a') | Ключевое слово('b') | Ключевое слово ("с") functor4 = Объединить (Ключевое слово ('a') | Ключевое слово ('b') | Ключевое слово ('c')) functor1.setName("Литерал('a') | Литерал('b') | Литерал('c')") functor2.setName("Слово('а') | Слово('б') | Слово('с')") functor3.setName("Ключевое слово('a') | Ключевое слово('b') | Ключевое слово('c')") functor4.setName("Объединить(Ключевое слово('a') | Ключевое слово('b') | Ключевое слово('c'))") функторы = [функтор1, функтор2, функтор3, функтор4] тесты = "a b c aaa bbb ccc после до".split() для func в функторах: функция печати для t в тестах: пытаться: напечатать t, ':', func.parseString(t) кроме ParseException как PE: печатать пе Распечатать
Литерал('a') | Литерал('b') | Буквальный ('c') а: ['а'] б : ['б'] с: ['с'] ааа : ['а'] ббб : ['б'] копия : ['с'] после'] перед: ['б'] Слово('а') | Слово('б') | Слово ('с') а: ['а'] б : ['б'] с: ['с'] ааа : ['ааа'] ббб : ['ббб'] копия : ['копия'] после'] перед: ['б'] Ключевое слово('а') | Ключевое слово('b') | Ключевое слово ("с") а: ['а'] б : ['б'] с: ['с'] aaa : Ожидается "a" (в символе 0), (строка: 1, столбец: 1) bbb : Ожидается «a» (в символе 0), (строка: 1, столбец: 1) ccc : Ожидается "a" (в символе 0), (строка: 1, столбец: 1) after : Ожидается "a" (в символе 0), (строка: 1, столбец: 1) до : ожидается "а" (в символе 0), (строка: 1, столбец: 1) Объединить(Ключевое слово('a') | Ключевое слово('b') | Ключевое слово('c')) а: ['а'] б : ['б'] с: ['с'] aaa : Ожидается "a" (в символе 0), (строка: 1, столбец: 1) bbb : Ожидается «a» (в символе 0), (строка: 1, столбец: 1) ccc : Ожидается "a" (в символе 0), (строка: 1, столбец: 1) after : Ожидается "a" (в символе 0), (строка: 1, столбец: 1) до : ожидается "а" (в символе 0), (строка: 1, столбец: 1)
Вы должны быть в состоянии сделать следующие наблюдения:
Литерал
будет соответствовать заданной строке, даже если это только начало более крупная строка.Word
будет соответствовать словесной группе символов состоящий из букв в строке конструктора.Ключевое слово
будет соответствует заданной строке только в том случае, если она не является частью большего слова (за которым следует пробел или символ, не являющийся словом)комбайн
нет действительно сделать что-нибудь в этом примере.
Целью Combine
является объединение нескольких совпадающих токенов в одну строку. Например, если вы определили номер социального страхования как:
Word(nums,exact=3) + '-' + Word(nums,exact=2) + '-' + Word(nums,exact=4)
, тогда разбор «555-66-7777» даст вам
['555', '-', '66', '-', '7777']
Скорее всего, вы бы хотели, чтобы это была одна строка, поэтому объедините результаты, заключив выражение парсера в Объединить
:
Объединить (Слово (числа, точное значение = 3) + '-' + Слово (число, точное значение = 2) + '-' + Слово (число, точное значение = 4)) ['555-66-7777']
Re: PDF Строка буквального анализа — сообщество поддержки Adobe
У меня есть следующее содержимое на одной и той же странице PDF, в разных объектах:
Ссылка на исходный файл
Первый :
[(немного текста)]] TJ ET Q
[(какой-то другой текст)] TJ ET Q
Очень простой и простой до сих пор. ..
**Второй**:
[( HTM L Ex a m p l e)] TJ ET Q
[( S o m e s e c i a l x a r a c r a s : < ¬ ¬ ¬ & ט ט © >
\\ s l a s h \\ \\ d o u b l e — s l a s h \\ \\ \\ t r i p l e — s l a s h )] TJ ET QПРИМЕЧАНИЕ : Это не заметно в тексте выше, но: 0T0M0L 0[32] 0E0x0a0m0p0l0e где каждый 0 является буквальным значением 0 == ((char)0) , поэтому, если я проигнорирую все значения 0, это на самом деле будет похоже на предыдущий пример…
Несколько байтов:
htmlexample == [0, 72, 0, 84, 0, 77, 0, 76, 0, 32, 0, 69, 0, 120, 0, 97, 0, 109, 0, 112, 0, 108, 0, 101]
Но в следующей строке мне нужно объединить каждые два байта в char из-за следующего:
< ¬ ¬ ¬...> на самом деле <0[32] [32]- 0[32] [32]- 0[32] [32]- .
Шрифт, используемый для проблемного объекта:
#7 0# {
‘Name’ : «F4»
‘BaseFont’ : «AAAAAE+DejaVu Sans-Bold»
‘ Subtype’ : «Type0»
‘ToUnicode’ : #41 0# {
‘Filter’ : «FlateDecode»
‘Length’ : 1679.0f
} + Stream(5771 байт)
‘Кодировка’ : «Identity-H»
‘DescendantFonts’ : [#42 0# {
9000 2 ‘FontDescriptor’ : #43 0# {‘MaxWidth’ : 2016.0f
‘AvgWidth’ : 573.0f
‘FontBBox’ : [-1069.0f, -415.0f, 1975.0f, 1174.0f]
‘MissingWidth’ : 600.0f
‘FontName’ : «AAAAAE+DejaVuSans -Жирный»
‘Тип’ : «FontDescriptor»
‘CapHeight’ : 729.0f
‘StemV’ : 60.0f 0.0f ‘ : » FlateDecode»
‘Length2’ : 83036. 0f
‘Length’ : 34117.0f
} + Stream(83036 байт)
‘Восхождение’ : 928.0f
‘Descent’ : -236.0f
‘XHeight’ : 547.0f
‘StemH’ : 2 6.0f
‘Flags’ : 32.0f
‘ItalicAngle’ : 0.0f
}
9 0002 ‘Подтип’ : «CIDFontType2»‘W’ : [32.0f, [348.0f, 456.0f, 521.0f, 838.0f, 696.0f, 1002.0f, 872.0f, 306.0f, 457.0f, 457 .0f, 523.0f, 838.0f, 380.0f, 415.0f, 380.0f, 365.0f], 48.0f, 57.0f, 696.0f, 58.0f, 59.0f, 400.0f, 60.0f, 62.0f, 838.0f, 63.0f, [580.0f, 1000.0f, 774.0f, 762.0f, 734.0f, 830.0f, 683.0f, 683.0f, 821.0 е, 837.0f, 372.0f, 372.0f, 775.0f, 637.0f, 995.0f, 837.0f, 850.0f, 733.0f, 850.0f, 770.0f, 720.0f, 682.0f, 812.0f, 774.0f, 1103.0ф, 771.0f, 724.0f, 725.0f, 457.0f, 365.0f, 457.0f, 838.0f, 500.0f, 500.0f, 675.0f, 716.0f, 593.0f, 716.0f, 678.0f, 435.
‘Тип’ : «Шрифт»
‘BaseFont’ : «AAAAAE+DejaVuSans-Bold»
‘CIDSystemInfo’ : {
90 002 ‘Дополнение’ : 0. 0f‘Порядок’ : «Идентификация» + Stream(8 байт )
‘Реестр’ : «Adobe» + Stream (5 байт)
}
‘DW’ : 600.0f
9000 2 ‘CIDToGIDMap’ : #44 0# {‘Фильтр’ : «FlateDecode»
‘Длина ‘ : 10200.0f
} + Stream(131072 байт)
}]
‘Тип’ : «Шрифт»
}
Нет указания на тип кодировки шрифта.
Что касается объекта ToUnicode, то в случае с этим шрифтом он не нужен, он должен был быть Identity-H, но вместо этого это сопоставление X == X вот несколько примеров, которые идут от до FFFF:
<0000> <00ff> <0000>
<0100> <01ff> <0100>
<0200> <02ff> <0200>
<0300> <0 3ff> <0300>
<0400> < 04ff> <0400>
<0500> <05ff> <0500>
<0600> <06ff> <0600>
<0700> <07ff> <0700>
<0800> <08ff> <0800>
<0900> <09ff> <0900>
<0a00> <0aff> <0a00>
<0b00> <0bff> <0b00>
<0c00> <0c ff> <0c00>
<0d00> < 0dff> <0d00>
<0e00> <0eff> <0e00>
<0f00> <0fff> <0f00>
<1000> <10ff> <1000>
<1100> <11ff> <1100>
.