gpt4 book ai didi

python - 在Python中解析半结构化文本字符串

转载 作者:行者123 更新时间:2023-12-01 08:16:43 25 4
gpt4 key购买 nike

我正在尝试解析伪英语脚本,并希望将其转换为另一种机器可读的语言。不过这个剧本以前有很多人写过,每个人都有自己的风格。

一些例子是:

  1. 在设备 1 上将字 45 和 46 设置为十六进制 331
  2. 在设备 1 上将字 45 和 46 位 3..7 设置为 280
  3. 在设备 1 上将字 45 设置为 oct 332
  4. 在设备 1 上将速度设置为 60kts 字 3-4 为十六进制 34(源码中还有很多不同的使用方式)

问题在于它并不总是符合逻辑或一致的

我查看了正则表达式,并匹配了某些单词。这工作正常,但是当我需要知道下一个单词时(例如,在“Word 24”中,我会匹配“Word”,然后尝试确定下一个标记是否是数字)。对于“单词”,我需要查找要设置的单词及其值。

在示例 1 中,它应该生成将字 45 设置为十六进制 331将字 46 设置为十六进制 331或者如果可能将字 45 设置为十六进制 331,将字 46 设置为十六进制 331

我尝试在 re 上使用 findall 方法 - 这只会给我匹配的单词,然后我必须尝试手动找出下一个单词(即值)

或者,我可以使用空格分割字符串并手动处理每个单词,然后能够执行类似的操作

假设列表是

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

有更好的方法来做我想做的事吗?我对标记化进行了一些研究,但不确定这是否有效,因为该语言一开始就不是结构化的。

最佳答案

我建议您开发一个程序,逐步探索人们用来编写脚本的语法。

例如,示例中的每条指令似乎都分为设备部分和设置部分。因此,您可以尝试将每一行与正则表达式 ^(.+) set (.+) 进行匹配。 。如果您发现与该模式不匹配的行,请将其打印出来。检查输出,找到与其中一些匹配的通用模式,将相应的正则表达式添加到您的程序中(或修改现有的正则表达式),然后重复。继续操作,直到您(以非常通用的方式)识别输入中的每一行。

(由于大小写似乎不一致,您可以执行不区分大小写的匹配,或者在开始处理之前将每一行转换为小写。更一般地,您可能会找到其他简化后续处理的“规范化”。例如,如果人们对空格的看法不一致,您可以将每组空白字符转换为单个空格。)

(如果您的输入有打印错误,例如有人将“set”写为“ste”,那么您可以更改正则表达式以允许这种情况( ... (set|ste) ... ),或者转到输入文件(的副本)并修复拼写错误。)

然后返回到匹配 ^(.+) set (.+) 的行,仅打印每个子字符串的第一组,然后对这些子字符串重复上述过程。然后对每个“set”指令中的第二组重复该过程。依此类推,递归。

最终,您的程序实际上将成为脚本语言的解析器。此时,您可以开始添加代码以将每个识别的结构转换为输出语言。

根据您使用 Python 的经验,您可以找到使代码简洁的方法。

关于python - 在Python中解析半结构化文本字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54943655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com