Мне нужно извлечь все номера из некоторого свободного текста в виде списка, используя pyparsing. Числа будут включать научную нотацию.Geting все числа как список из строки с pyparsing
Это моя грамматика:
digits = ''
#straight number = 5, 10 ,65535
strt_num = pp.Word(digits)
decimal = pp.Literal('.')
dec_num = strt_num+decimal+strt_num
multiply = pp.Literal('×')
minus = pp.Literal('−')
sci_num = (dec_num^strt_num)+multiply+'10'+pp.Optional(minus)+strt_num
num = sci_num^dec_num^strt_num
num.parseString('5 × 10−5 and then there is also 0.0001')
Это дает мне:
(['5', '\xc3\x97', '10', '\xe2\x88\x92', '5'], {})
Какие две проблемы:
- Это дает мне номер в качестве различных соответствующих частей (вместо одна строка)
- Это дает мне только первое совпадающее число
Для задачи 1, я пытался использовать Комбайн класс из документации, как это в конце:
num = pp.Combine(sci_num^dec_num^strt_num)
, но это останавливает соответствие целого числа по какой-то причине и просто дает мне это:
(['5'], {})
Для проблемы 2 я не могу найти что-либо в документации, подобной «findall». Единственный вариант - это сделать n-граммы (например, начиная с 5 граммов или что-то еще), посмотреть, совпадают ли они, а затем сделать n меньше, если нет. Текст между цифрами может быть любым (его не что-то чистое, как запятый список номеров, как в других вопросах, которые я видел здесь)
Но я чувствую, что должен быть лучший способ. Любая помощь приветствуется. Благодаря!