Я пытаюсь разобрать псевдоанглийские сценарии и хочу преобразовать его в другой машиночитаемый язык.Однако этот сценарий был написан многими людьми в прошлом, и у каждого был свой стиль написания.
Некоторые примеры:
- На устройстве 1 Установите слова 45 и 46в шестнадцатеричное значение 331
- На устройстве 1 задайте слова 45 и 46 битов 3.,7–280
- на устройстве 1 установите слово 45 на октаву 332
- на устройстве 1 установите скоростьдо 60 узлов Слова 3-4 до гекса 34 (в исходном тексте используется много других способов)
Проблема в том, что она не всегда логична или непоследовательна
Я смотрел наРегулярное выражение и сопоставление определенных слов.Это работает хорошо, но когда мне нужно знать следующее слово (например, в «Word 24» я бы соответствовал «Word», затем попытался выяснить, является ли следующий токен числом или нет).В случае «Слова» мне нужно искать слова для установки, а также их значения.
в примере 1, он должен выдавать Set word 45 to hex 331
и Set word 46 to hex 331
или, если возможно, Set word 45 to hex 331 and word 46 to hex 331
я попытался использовать метод findall для re - это дало бы мне только совпадающие слова, а затем я должен попытаться найти следующее слово (то есть значение) вручную
в качестве альтернативы, яМожно разделить строку, используя пробел, и обработать каждое слово вручную, а затем сделать что-то вроде
, если предположить, что список равен
['On', 'device1:', 'set', 'Word', '1', '', 'to', '88', 'and', 'word', '2', 'to', '2151']
for i in range (0,sp.__len__()):
rew = re.search("[Ww]ord", sp[i])
if rew:
print ("Found word, next val is ", sp[i+1])
. Есть ли лучший способ сделать то, что я хочу?я немного разбирался в токенизации, но не уверен, что это сработает, поскольку язык не структурирован.