【发布时间】:2018-03-25 17:37:31
【问题描述】:
我的所有大学笔记格式如下:
CourseName: {
Part 1: {
I.I - Intro: {
Topic1: {
descr1;
descr2: {
2.a;
2.b;
2.c.
};
descr3.
};
Topic2: {
descr: {
example.
}.
}.
};
I.II - NextChapter: {
Topic3: {
whatever.
}.
}.
};
Part 2: {
II.I - FinalChapter: {
content.
}.
}.
}
我想将它们构造成一个树数据结构,在过去的几个小时里,我已经尝试过递归和迭代地这样做,做了很多研究在线,但我的尝试都没有奏效。
我已经实现了一个 Node 类(带有 我正在努力的是了解如何构造函数 有什么建议吗?self.__value 和一个列表 self.__children 以及您期望从中获得的所有有用方法)以及一个 Tree 类(使用self.__nodes 作为字典 和其他实用方法),因此请随意在答案中以任何您喜欢的形式使用add_node 或add_child 等方法。
def parseTree(s, l) - 理想情况下,输入字符串s(我的笔记)和列表l 建立分隔符即[":{", ";", "}."] 或@ 987654331@ 或类似的 - 并返回一个树对象,每个节点的值都是 :{ 之前的文本和文本中由 ; 分隔的子项列表(如果有)。
【问题讨论】:
-
显示你的代码!
-
您应该首先将它们重新格式化为可解析的形式(JSON、yaml 等)。
-
chepner 和 Daniel Roseman 是对的——使用现有的解析器总是更容易。但是如果你确实想自己做这件事,我认为你可能缺少的是,你已经完成了设计自定义递归下降解析器的 75%,但还没有想到递归地实现它。这可能会帮助您搜索。但是,另一方面,你的语言更简单,你可以编写一个简单的语法来提供给解析器生成器或解析器框架,而不是编写代码,所以你可能想要搜索它。
-
@ekhumoro 我知道我必须展示它,但我有点做不到,因为它是一个没有运行的混乱,是反复试验的结果,更多的是关于如何解决问题的一般想法比实际代码
-
@abarnert 非常感谢,这正是我想要做和寻找的。一个全新的世界刚刚向我敞开!我也愿意重新格式化我的“语法”,使其尽可能简单和可解析以使其工作。但是 75% 的路还很长……我仍然对如何取得进展一无所知。
标签: python parsing tree text-parsing parse-tree