从字符串中删除非标记标点符号
Removing non-token punctation marks from a string
我正试图从 python 的测试中删除某些标点符号。本质上,我制作了一个令牌计数器,并试图删除所有围绕单词的多余标点符号(即引号等),而不删除任何相关的令牌信息(即撇号)。
我已经 here, here and here 寻找灵感。但是,建议的解决方案不一定能解决我的问题。
例如,我有这样的字符串案例:''couldn't
我想删除 ''
而不是 n 和 [=50 之间的 '
=]t
到目前为止,我已经尝试使用 re
如:
excludeLine = line.strip(' "\'\t\r\n')
和
excludeLine = re.sub(r'[^\w\s]','',line)
和
excludeLine = re.sub('[%s]' % re.escape(string.punctuation), '', line)
不仅去除了所有标点符号,导致 couldnt
,而且还去除了所有与标记相关的标点符号,例如 -
用 state-of-the-art
之类的话让我留下 stateoftheart
.
有没有人有解决方案,只删除那些外部的,syntax/grammar-necessary 标点符号,例如引号、单引号(但保留撇号、连字符等)、感叹号、句点...等等
编辑
这是我用来提取单个标记字符串的 re
。
counter.update(x for x in split("[^a-zA-Z']+", line) if x)
难道我还需要再细化一下吗?
re.sub(u"\u005C[nrt]", r"", YOUR_STRING)
excludeLine = re.sub(r'(?!\w.\w)(?:.|^)\K[^\w\s]', '', line)
(如果你的库支持 \K
)
我正试图从 python 的测试中删除某些标点符号。本质上,我制作了一个令牌计数器,并试图删除所有围绕单词的多余标点符号(即引号等),而不删除任何相关的令牌信息(即撇号)。
我已经 here, here and here 寻找灵感。但是,建议的解决方案不一定能解决我的问题。
例如,我有这样的字符串案例:''couldn't
我想删除 ''
而不是 n 和 [=50 之间的 '
=]t
到目前为止,我已经尝试使用 re
如:
excludeLine = line.strip(' "\'\t\r\n')
和
excludeLine = re.sub(r'[^\w\s]','',line)
和
excludeLine = re.sub('[%s]' % re.escape(string.punctuation), '', line)
不仅去除了所有标点符号,导致 couldnt
,而且还去除了所有与标记相关的标点符号,例如 -
用 state-of-the-art
之类的话让我留下 stateoftheart
.
有没有人有解决方案,只删除那些外部的,syntax/grammar-necessary 标点符号,例如引号、单引号(但保留撇号、连字符等)、感叹号、句点...等等
编辑
这是我用来提取单个标记字符串的 re
。
counter.update(x for x in split("[^a-zA-Z']+", line) if x)
难道我还需要再细化一下吗?
re.sub(u"\u005C[nrt]", r"", YOUR_STRING)
excludeLine = re.sub(r'(?!\w.\w)(?:.|^)\K[^\w\s]', '', line)
(如果你的库支持 \K
)