python括号如何转义_NLTK PAR中的转义括号

起初我以为这是不可能的。。。但写了一半我找到了解决办法。然而,这个解决方案相当混乱,所以我留下了一个稍微好一点的解决方案。在

nltk允许您提供自定义正则表达式,这样您就可以编写一个正则表达式来匹配转义括号。正则表达式([^\s\(\)\\]+(\\(?=\()\([^\s\(\)\\]+\\(?=\))\))*[\\]*)+将匹配由反斜杠(\)转义的括号。但是,这将在每个叶中包含转义反斜杠,因此必须编写一个叶函数来删除这些反斜杠。以下代码将正确解析它:from nltk import Tree

s = '(S (NP (PRP They)) (VP like\(d\) (NP (PRP it)) (NP (DT a) (NN lot))) (. .))'

tree = Tree.fromstring(s, leaf_pattern=r"([^\s\(\)\\]+(\\(?=\()\([^\s\(\)\\]+\\(?=\))\))*[\\]*)+", read_leaf=lambda x: x.replace("\\(", "(").replace("\\)", ")"))

print(tree)

它输出:

^{pr2}$

原始答案

也许您可以要求nltk匹配另一个括号:from nltk import Tree

s = '[S [NP [PRP They]] [VP like(d) [NP [PRP it]] [NP [DT a] [NN lot]]] [. .]]'

tree = Tree.fromstring(s, brackets='[]')

print(tree)

打印出来的是:

^{pr2}$

您可以通过使用pformat方法(调用print时在内部调用)来获得不同的括号:print(tree.pformat(parens='[]'))

打印出来的是:[S

[NP [PRP They]]

[VP like(d) [NP [PRP it]] [NP [DT a] [NN lot]]]

[. .]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值