从字符串中删除非标记标点符号

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