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]