问题:
s = '(S ))'
Tree.fromstring(s)
ValueError: Tree.read(): expected u'end-of-string' but got ')' at index 4.
"(S ))"
........^s = '(S ()'
Tree.fromstring(s)
ValueError: Tree.read(): expected u')' but got u'end-of-string' at index 5.
"(S ()"
.......^
解决方案:
允许转义字符'('和')'。
4条答案
按热度按时间nbysray51#
我同意这个观点。
hm2xizp92#
有人找到解决这个问题的方法了吗?
xbp102n03#
解析器不会将')'作为括号进行转义,而是只考虑'',然后关闭(组成)节点。
解决方法:将所有出现的')'和'('分别替换为'-LRB-'和'-RRB-':
siv3szwd4#
当前的正则表达式只允许非空白字符,且这些字符不等于用于指定节点和叶子的括号。@yetanotheryeti 的解决方法可能是一个好办法。也许可以在应用正则表达式之前识别、去除或标记转义的括号,然后在解析树之后重新引入。
在最佳情况下,输入中的
\)
应保持为输出中的\)
,即不是像-RRB-
这样的一个令牌。此外,最好不要像保留一些输入(如-RRB-
)作为影响程序行为的令牌那样,需要预留一些输入。我的意思是,对于不了解函数内部工作原理的用户来说,他们不应该随机地将恰好为-RRB-
的令牌转换为\)
。我已经将此问题标记为要解决的第一个好问题。希望这能引起更多人的关注。