【发布时间】:2021-07-02 03:29:58
【问题描述】:
我已经编写了将 Python 代码转换为列表以计算 BLEU score 的代码:
import re
def tokenize_for_bleu_eval(code):
code = re.sub(r'([^A-Za-z0-9_])', r' \1 ', code)
code = re.sub(r'([a-z])([A-Z])', r'\1 \2', code)
code = re.sub(r'\s+', ' ', code)
code = code.replace('"', '`')
code = code.replace('\'', '`')
tokens = [t for t in code.split(' ') if t]
return tokens
感谢这个 sn-p 我的代码 struct.unpack('h', pS[0:2]) 被正确解析到列表 ['struct', '.', 'unpack', '(', 'h', ',', 'p', 'S', '[', '0', ':', '2', ']', ')'] 中。
最初,我以为我只需要使用 ' '.join(list_of_tokens),但它会像 struct . unpack ('h' , p S [ 0 : 2 ] ) 这样杀死我的变量名,并且我的代码不可执行。
我尝试使用正则表达式粘贴一些变量名,但我无法成功反转我的函数tokenize_for_bleu_eval 以在最后找到可执行代码。有人有想法吗,也许没有正则表达式,这似乎太复杂了?
编辑:我们不能只删除列表元素之间的所有空格,因为有像items = [item for item in container if item.attribute == value] 这样的示例,其中没有空格的回译结果将是itemforiteminaifitem[0]==1,这是无效的。
【问题讨论】:
-
您能否举例说明您的样本列表的正确输出?
-
我不确定你的意思。预期的输出是初始代码,即
struct.unpack('h', pS[0:2]) -
Regex 在这里看起来像是一个非常不合适的工具。您是否考虑过 Python 代码解析器方法?我没试过,但是you might find some tips here.
标签: python python-3.x regex