使用正则表达式删除填充词

时间:2019-12-03 15:55:16

标签: python regex text

我有一个文本集合,我正在尝试查找所有“填充词”并将其替换为空格:在这种情况下,填充词指的是诸如“ hmm”,“ uh”,“ ha”普通话。

我使用的是正则表达式,除了某些异常外,通常可以删除我目前所拥有的代码所需的内容

考虑以下句子:

fw_end = 'Foo bar Foo bar hm' # filler at end of sentence
fw_start = 'hmmm foo bar foo bar' # filler at start of sentence
fw_startCap = 'Hmm foo bar foo bar' # (capitalized) filler at start of sentence
fw_mid = 'foo bar hmmmmm foo bar' # filler in middle of sentences

使用以下内容,我可以从所有情况中除去长度不同的'hmm',但大写H除外(fw_startCap):

def applyRegExp(textFiller):
    textClean = re.sub('^(?!mom|am|ham)[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]+\s', ' ', textFiller) # at the start of a string
    textClean = re.sub('\s(?!mom|am|ham)[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]+\s', ' ', textClean) # within a string
    textClean = re.sub('\s(?!mom|am|ham)[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]$', ' ', textClean) # end of a string
    textClean = re.sub('^(?!mom|am|ham)[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]$', ' ', textClean) # if entire turn string

    return textClean

注意:“妈妈”,“上午”和“火腿”是非填充词,也会被该规则所困扰

因此,我的下一个尝试是在等式的负号前行将大写等价项包括在等式的第一部分:

def applyRegExp_WITHCAP(textFiller):
    textClean = re.sub('^(?!mom|am|ham)[U*|H*|M*|O*|A*]|[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]+\s', ' ', textFiller) # at the start of a string
    textClean = re.sub('\s(?!mom|am|ham)[U*|H*|M*|O*|A*]|[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]+\s', ' ', textClean) # within a string
    textClean = re.sub('\s(?!mom|am|ham)[U*|H*|M*|O*|A*]|[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]$', ' ', textClean) # end of a string
    textClean = re.sub('^(?!mom|am|ham)[U*|H*|M*|O*|A*]|[u*|h*|m*|o*|a*]+[m*|h*|u*|a*]$', ' ', textClean) # if entire turn string

    return textClean

这实现了我所需要的,但是引入了不希望的过滤。例如,在下面的句子中,我对“您”一词有疑问:

you_sent = 'You are causing my regex to fail' # problem sentence

运行applyRegExp_WITHCAP代码会剥去“您”的“ ou”部分,我无法弄清原因。我对代码的想法的解释类似于:“查看字符串的开头/中间/结尾,查找不是“妈妈”,“上午”或“火腿”的任何内容,然后以大写/小写形式查找以下内容之一:Uu,Hh,Mm,Oo,Aa-后接一个或多个小写字母m,h,u或a“。

简而言之,鉴于我尚未指定大写字母“ Y”,因此我无法弄清楚为什么会过滤“您”。

注意:我认识到我可以对所有内容进行小写,但是出于以后的目的,这是不可能的。

编辑:在下面的评论中,我可以提供有关我要实现的目标的更多详细信息。我使用不同的转录标准,转录了很多由不同人转录的对话文本。如果在偏移处没有定义的“填充词”字典,就无法控制(1)要使用的填充词的类型,以及(2)它们的正确拼写。例如,一致的声音可能会在语料库中显示为“ mm”,“ mmm”,“ hm”,“ hmm”,“ hmmm”,“ mm-hmm”等。我正在寻找一种相对简单的方法来捕获其中的大部分并将其从语料库中删除。

0 个答案:

没有答案
相关问题