Python/PyParsing:setResultsName的困难

Python/PyParsing:setResultsName的困难,python,nlp,pyparsing,Python,Nlp,Pyparsing,我想我在调用setResultsName()时犯了一个错误: 从空闲: >>> myparser import * >>> statement.parseString("CS 2110") (['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]}) 我希望的产出是: >>> myparser import * >>> statement.

我想我在调用
setResultsName()
时犯了一个错误:

从空闲:

>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
我希望的产出是:

>>> myparser import *
>>> statement.parseString("CS 2110")
(['CS', 2110], {'Course': ['CS', 2110], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})

setResultsName()
是否仅适用于终端?

如果将
课程的定义更改为

course = (DEPT_CODE + COURSE_NUMBER).setResultsName("Course")
您将获得以下行为:

x=statement.parseString("CS 2110")
print(repr(x))
# (['CS', 2110], {'Course': [((['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]}), 0)], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
print(x['Dept Code'])
# CS
print(x['Course Number'])
# 2110
print(x['Course'])
# ['CS', 2110]
这并不完全是您想要的
repr
,但它足够了吗

注:

[setResultsName]返回 原始ParseRelation对象; 这样,客户机就可以定义 基本元素,如整数, 并在多个地方引用它 用不同的名字


因此,
course.setResultsName(“course”)
不起作用,因为它不会影响
课程
。您将不得不说
course=course.setResultsName(“course”)
。这是我上面所做的另一种方法。

另外,似乎
setResultsName()
返回了一个副本,但是
setParseAction()
没有返回-为什么不一致?还是我弄错了?@Rosarch:
repr()
返回对象的字符串表示形式。它通常提供比
str()
更完整的对象内部数据视图。我认为你是对的,
setParseAction
返回
self
,而
setResultName
返回一个副本。我没有足够的知识来解释为什么会这样。
x=statement.parseString("CS 2110")
print(repr(x))
# (['CS', 2110], {'Course': [((['CS', 2110], {'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]}), 0)], 'Dept Code': [('CS', 0)], 'Course Number': [(2110, 1)]})
print(x['Dept Code'])
# CS
print(x['Course Number'])
# 2110
print(x['Course'])
# ['CS', 2110]