gpt4 book ai didi

python - 在 Python 中进行文本处理时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-03 18:14:14 25 4
gpt4 key购买 nike

我遇到了一种奇怪的语法,我试图将其强制转换为对 python 更友好的语法。

给定这样的结构:

s = "a1{b2{a3|b3}c2{d3|e3}e2{a4}}b1{a6|b7}"

处理完文本后,您应该得到:

data == {
'a1': {
'b2': ['a3', 'b3'],
'c2': ['d3', 'e3'],
'e2': 'a4'},
'b1': ['a6', 'b7']
}

我正在努力解决这个问题,并且希望获得一些有关如何正确解析此问题的帮助。显然这个例子只是一个例子,但是“|”、“{”、“}”的标记是正确的分割符。

def parse_tree_to_dict(data):

level, word, key, tree = 0, "", "", []
index_tree = []
result = {}

for letter in data:
if letter == "|":
print("{0} {1} {2}".format(" "*level, "|", word))
tree.append(word)
word = ""
elif letter == "{":
print("{0} {1} {2}".format(" "*level, "{", word))
key = word
index_tree.append(key)
word = ""
level += 1
elif letter == "}":
print("{0} {1} {2}".format(" "*level, "}", word))
key = key if key else word
result[key] = tree if len(tree) else word
try:
result = result[index_tree.index(key)-1]
except (KeyError, IndexError):
pass
level -= 1
else:
word += letter
return result

if __name__ == "__main__":

s = "a1{b2{a3|b3}c2{d3|e3}e2{a4}}b1{a6|b7}"
data = parse_tree_to_dict(s)
assert data == {
'a1': {
'b2': ['a3', 'b3'],
'c2': ['d3', 'e3'],
'e2': 'a4'},
'b1': ['a6', 'b7']
}, "Nice try.. {} is wrong".format(data)

最佳答案

在这种情况下,您确实需要一个完整的解析器生成器来为您完成工作。 Python 有无数的解析器(即在 Python 中使用,而不是解析 Python 代码),但遗憾的是,标准库中没有任何解析器。我对其中任何一个都没有太多经验,但绝对值得一试:如果可以避免的话,解析就不是临时要做的事情。 (参见https://wiki.python.org/moin/LanguageParsing。)

如果做不到这一点,您应该考虑编写一个递归下降解析器。除非我错过了我的猜测,否则您的语法可以轻松地在没有左递归的情况下制定,从而使递归下降解析器易于编写。解析器中的每个术语函数都会返回一个数据对象,供调用它的术语函数使用。不太困难,而且它的优点是不需要单独的标记化过程。

关于python - 在 Python 中进行文本处理时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272546/

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