使用 RE 在 Python 中拆分输入以进行标记化
Splitting an input for tokenization in Python using RE
我正在尝试拆分要在 Python 中标记化的输入字符串,但到目前为止所做的所有尝试都会导致 Python "nothing to repeat" 投诉。
目前,我正在使用 re.findall 而不是 re.split,但我不确定我的正则表达式错误在哪里。
我当前的正则表达式如下所示:
inputList = re.findall(r"[\w']+|[.,!?;]|[\s]", testString)
我想按标点符号或空格拆分。
我之前尝试过:
inputList = re.split(r'(\s|\W)*', testString)
但这会给我不希望的输出字符串。
我也试过:
inputList = re.split(r'(\s+)|([.,!?;]+)', testString)
但是出现了同样的错误。
一个测试字符串的例子:
testString = "Beautiful King John! ??? I'm here. It's 'bout time."
所需输出示例:
['Beautiful', ' ', 'King', ' ', 'John', '!', ' ', '?', '?', '?', ' ', "I'm", ' ', 'here', '.', ' ', "It's", ' ', "'bout", ' ', 'time', '.']
我的 re.findall 得到了正确的输出,但是 Python 抛出了错误,如果可能的话,我想摆脱它。
有人可以指出我在使用正则表达式时犯的错误吗?
对于您的示例,此方法有效,但也给出了空字符串:
re.split(r'([ !?.])', testString)
# ['Beautiful', ' ', 'King', ' ', 'John', '!', '', ' ', '', '?', '', '?', '', '?', '', ' ', "I'm", ' ', 'here', '.', '', ' ', "It's", ' ', "'bout", ' ', 'time', '.', '']
但是你想要的输出只是一个过滤器操作:
inputList = [t for t in re.split(r'([ !?.])', t) if t]
# ['Beautiful', ' ', 'King', ' ', 'John', '!', ' ', '?', '?', '?', ' ', "I'm", ' ', 'here', '.', ' ', "It's", ' ', "'bout", ' ', 'time', '.']
我正在尝试拆分要在 Python 中标记化的输入字符串,但到目前为止所做的所有尝试都会导致 Python "nothing to repeat" 投诉。
目前,我正在使用 re.findall 而不是 re.split,但我不确定我的正则表达式错误在哪里。
我当前的正则表达式如下所示:
inputList = re.findall(r"[\w']+|[.,!?;]|[\s]", testString)
我想按标点符号或空格拆分。
我之前尝试过:
inputList = re.split(r'(\s|\W)*', testString)
但这会给我不希望的输出字符串。
我也试过:
inputList = re.split(r'(\s+)|([.,!?;]+)', testString)
但是出现了同样的错误。
一个测试字符串的例子:
testString = "Beautiful King John! ??? I'm here. It's 'bout time."
所需输出示例:
['Beautiful', ' ', 'King', ' ', 'John', '!', ' ', '?', '?', '?', ' ', "I'm", ' ', 'here', '.', ' ', "It's", ' ', "'bout", ' ', 'time', '.']
我的 re.findall 得到了正确的输出,但是 Python 抛出了错误,如果可能的话,我想摆脱它。 有人可以指出我在使用正则表达式时犯的错误吗?
对于您的示例,此方法有效,但也给出了空字符串:
re.split(r'([ !?.])', testString)
# ['Beautiful', ' ', 'King', ' ', 'John', '!', '', ' ', '', '?', '', '?', '', '?', '', ' ', "I'm", ' ', 'here', '.', '', ' ', "It's", ' ', "'bout", ' ', 'time', '.', '']
但是你想要的输出只是一个过滤器操作:
inputList = [t for t in re.split(r'([ !?.])', t) if t]
# ['Beautiful', ' ', 'King', ' ', 'John', '!', ' ', '?', '?', '?', ' ', "I'm", ' ', 'here', '.', ' ', "It's", ' ', "'bout", ' ', 'time', '.']