使用字典替换文本数据

时间:2019-04-11 21:37:47

标签: python dictionary nlp lookup

具有以下结构的数据框-

ID text
0  Language processing in python th is great
1  Relace the string 

字典名为自定义修复程序

{'Relace': 'Replace', 'th' : 'three'}

尝试过代码,输出如下: 电流输出-

ID text
0  Language processing in pythirdon three is great
1  Replace threee string 

代码:

def multiple_replace(dict, text):
  # Create a regular expression  from the dictionary keys
  regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))

  # For each match, look-up corresponding value in dictionary
  return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text) 

df['col1'] = df.apply(lambda row: multiple_replace(custom_fix, row['text']), axis=1)

预期输出-

ID text
0  Language processing in python three is great
1  Replace the string

2 个答案:

答案 0 :(得分:1)

我不是正则表达式专家,也许这不是最佳解决方案,但是使用 正则表达式中的单词边界\b应该可以解决问题,这里是固定功能:

def multiple_replace(d, text):
    # Create a regular expression  from the dictionary keys
    regex = re.compile("(%s)" % "|".join(["\\b" + x + "\\b" for x in d.keys()]))

    # For each match, look-up corresponding value in dictionary
    return regex.sub(lambda mo: d[mo.string[mo.start():mo.end()]], text)

答案 1 :(得分:0)

您还可以拆分字符串以获取所有单词并遍历列表。

    def multiple_replace(d, text):
        splitText=text.split()
        disc=len(set(splitText).intersection(set(d.keys())))
        if disc==0:    
            return ' '.join(splitText)
        else:
            for k in range(len(splitText)):      
                try:        
                    splitText[k]=d[splitText[k]]        
                except KeyError:        
                    pass
            return ' '.join(splitText)

希望有帮助。