问题标签 [pyparsing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
246 浏览

parsing - 重写多用途日志文件解析器以使用形式语法会提高可维护性吗?

TLDR:如果我为每种格式手动构建了一个多用途解析器,从长远来看,使用一大块解析器代码和 ANTLR、PyParsing 或类似语法来指定每种格式会更好吗?

背景:我的工作涉及来自大约 50 个不同基准的大量基准日志文件。有一些 XML、一些 HTML、一些 CSV 和许多没有文档规范的专有内容。为了节省我和我的同事手动输入这些数据的时间,我编写了一个解析工具,它可以通过统一的界面处理我们经常处理的所有格式。但是,设计不是那么干净。

我用 Python 写了这个东西并创建了一个 Parser 类。每种文件格式都作为一种实现来处理,它为 Parser 的 read() 方法提供自己的代码。我喜欢只有一个使用语法来理解每种格式的 Parser 定义的想法,但我以前从未这样做过。

这值得我花时间吗,一旦我完成重构,其他新手将来会更容易合作吗?

0 投票
3 回答
931 浏览

python - 解析问题

此代码有效:

我被困在两个问题上:

1 - 如何使用自定义函数来解析令牌。例如,如果我想使用一些自定义逻辑而不是正则表达式来确定数字是否是邮政编码。代替:

也许:

2 - 如何确定字符串解析到的内容。“80001”解析为“zipcode”,但我如何使用 pyparsing 确定这一点?我不是为它的内容解析一个字符串,而只是为了确定它是什么类型的查询。

0 投票
3 回答
7062 浏览

python - Python - pyparsing unicode 字符

:) 我尝试使用 w = Word(printables),但它不起作用。我应该如何给出这个规范。'w' 用于处理印地语字符 (UTF-8)

代码指定语法并进行相应的解析。

如果只有英文字符,它可以工作,因此代码对于 ascii 格式是正确的,但代码不适用于 unicode 格式。

我的意思是当我们有 671.asses :: ahsaas ::2 形式的东西时,代码就可以工作

即它解析英文格式的单词,但我不知道如何解析然后打印unicode格式的字符。我需要这个用于英语印地语单词对齐。

python代码如下所示:

如果源文件的示例输入语句是:

输出看起来像这样:-

输出说明:- 这实现了双向对齐。这意味着英语“modern”的第一个词映射到印地语“AddhUnIk”的第一个词,反之亦然。在这里,甚至字符也被视为单词,因为它们也是双向映射的组成部分。因此,如果您观察印地语单词“。” 有一个空对齐,它没有映射到英文句子,因为它没有句号。当我们处理许多您试图实现双向映射的句子时,输出中的第 3 行基本上代表一个分隔符。

如果我有 Unicode(UTF-8) 格式的印地语句子,我应该进行哪些修改才能使其正常工作。

0 投票
2 回答
730 浏览

python - Pyparsing带有随机引号的CSV字符串

我有一个如下字符串:

我尝试使用 CSV 模块,但它不适合,因为我还没有找到一种方法来忽略引用的内容。Pyparsing 看起来是一个更好的答案,但我还没有找到声明所有语法的方法。

目前,我正在使用我的旧 Perl 脚本来解析它,但我希望它是用 Python 编写的。如果你需要我的 Perl 片段,我很乐意提供。

任何帮助表示赞赏。

0 投票
1 回答
1103 浏览

python - Python/PyParsing:setResultsName 的困难

我想我在打电话时犯了一个错误setResultsName()

从空闲:

我希望的输出:

setResultsName()只对终端有效吗?

0 投票
1 回答
3502 浏览

python - PyParsing:Combine() 做什么?

有什么区别:

谢谢。

更新:根据我的实验,它似乎Combine()适用于终端,您试图在其中构建一个匹配的表达式,而 plain+用于非终端。但我不确定。

0 投票
2 回答
556 浏览

python - PyParsing:并非所有令牌都传递给 setParseAction()

我正在解析诸如“CS 2110 或 INFO 3300”之类的句子。我想输出如下格式:

为此,我认为我可以使用setParseAction(). 但是,中的print语句statementParse()表明实际上仅传递了最后一个令牌:

我希望所有令牌都能通过,但它只是['INFO', 3300]. 难道我做错了什么?还是有另一种方法可以产生所需的输出?

这是pyparsing代码:

0 投票
4 回答
5673 浏览

python - PyParsing:这是正确使用 setParseAction() 吗?

我有这样的字符串:

我想输出:

这是我的做法,虽然我还没有完全明白:

这输出:

这是正确的方法吗,还是我完全离开了?

此外, 的输出并不完全正确 - 我想course_data发出一个course格式相同的符号列表。现在,第一门课程与其他课程不同。(它有一个{},而其他没有。)

0 投票
6 回答
36688 浏览

python - 如何最好地解析一个简单的语法?

好的,所以我已经问了一些关于这个项目的小问题,但是我仍然对我提出的设计没有太大的信心,所以我要问一个更广泛的问题。

我正在解析课程目录的先决条件描述。描述几乎总是遵循某种形式,这让我觉得我可以解析其中的大部分。

从文本中,我想生成一个课程先决条件关系图。(在我解析数据之后,这部分会很容易。)

一些示例输入和输出:

  1. 如果整个描述只是一个课程,则直接输出。

  2. 如果课程是连体的(“和”),它们都在同一个列表中输出

  3. 如果课程不连贯(“或”),则它们位于单独的列表中

  4. 在这里,我们有“and”和“or”。

一个使它更容易的警告:似乎“and”/“or”短语的嵌套永远不会大于示例 3 中所示的。

做这个的最好方式是什么?我从 PLY 开始,但我不知道如何解决减少/减少冲突。PLY 的优点是很容易操纵每个解析规则生成的内容:

使用 PyParse,如何修改parseString(). 我正在考虑以@Alex Martelli 的想法为基础,将状态保存在对象中并从中建立输出,但我不确定如何最好地完成。

例如,要处理“或”情况:

如何disjunctionCourses()知道要分离哪些较小的短语?它得到的只是令牌,但到目前为止解析的内容都存储在 中result,那么该函数如何判断其中的哪些数据result对应于 的哪些元素token?我想我可以搜索令牌,然后找到具有result相同数据的元素,但这感觉很复杂......

此外,还有许多包含杂项文本的描述,例如:

但我解析该文本并不重要。

解决这个问题的更好方法是什么?

0 投票
3 回答
619 浏览

python - 解析歧义

我正在尝试使用 PyParser 解析一些文本。问题是我的名字可以包含空格。所以我的输入可能看起来像这样。首先是名单:

然后,他们做的事情:

问题当然是他们所做的事情可能与名称的结尾相同:

如何为动作线创建解析器?解析的输出Joe A应该是[Joe, A]. 解析的输出Jimmy X C应该[Jimmy X, C]Jimmy X X- [Jimmy X, X]。也就是[name, action]对。

如果我天真地创建我的名称解析器,意思是类似的东西OneOrMore(RegEx("\S*")),那么它将匹配整行,给我[Jimmy X X]一个解析错误,因为没有看到一个动作(因为它已经被名称解析器消耗了)。

注意:很抱歉之前的措辞模棱两可,这看起来像是一个 NLP 问题。