【问题标题】:Use regex on list items to replace whole word在列表项上使用正则表达式来替换整个单词
【发布时间】:2019-10-29 06:53:52
【问题描述】:

我有一个包含对话的大型数据集all_transcripts,我有一个包含不同城市名称的小列表gemeentes。在all_transcripts 中,我想将每个给出城市名称的实例替换为“woonplaats”(城市的荷兰语)。

为此,我有以下代码:

all_transcripts['filtered'] = all_transcripts['no_punc'].str.replace('|'.join(gemeentes),' woonplaats ')

但是,这会替换出现单词组合的每个实例,而不仅仅是整个单词。

我正在寻找的是这样的:

all_transcripts['filtered'] = all_transcripts['no_punc'].re.sub('|'r"\b{}\b".format(join(gemeentes)),' woonplaats ')

但这不起作用。

例如,我有:

all_transcripts['no_punc'] = ['i live in amsterdam', 'i come from haarlem', 'groningen is her favourite city']

gemeentes = ['amsterdam', 'rotterdam', 'den haag', 'haarlem', 'groningen']

运行代码后我想要的输出如下:

>>> ['i live in woonplaats', 'i come from woonplaats', 'woonplaats is her favourite city']

之前,我使用过正则表达式的 '\b' 选项。但是,我不知道如何在这里应用它。我可以为gemeentes 中的每个单词运行一个 for 循环,并将其应用于整个数据集。但是考虑到它的大小(gemeentes 有超过 300 个变量和超过 250 万行的 all_transcripts),这在计算上会非常昂贵,因此,我想要一种与上面类似的方法,使用 OR 运算符替换字符串。

【问题讨论】:

  • 为什么不使用 for 循环?您的正则表达式引擎在下面实现了相同的功能。如果查询中有这么多|,最好只使用for循环。
  • 如果您提供了一个示例gemeentes 列表和替换后的所需结果,这将很有用。如果我必须根据提供的信息进行猜测,您需要re.sub(r"\b({})\b".format('|'.join(gemeentes)),' woonplaats ')
  • @ZachWoods 我编辑了我的问题,向您展示我想要什么。你知道我该怎么做吗?

标签: python regex replace


【解决方案1】:

看起来您已经很接近了,但您需要稍微更改一下您的 re.sub 呼叫。像这样的东西应该可以工作:

gemeentes = ['amsterdam', 'rotterdam', 'den haag', 'haarlem', 'groningen']
all_transcripts['filtered'] = [re.sub(r"\b({})\b".format("|".join(gemeentes)), "woonplaats", s) for s in all_transcripts['no_punc']]

输出

all_transcripts['filtered'] = ['我住在 woonplaats', '我来自 woonplaats', 'woonplaats 是她最喜欢的城市']

至于性能,我不确定您是否会比传统的 for 循环获得更好的速度,因为您仍然需要遍历 2500 万个条目并应用正则表达式。

【讨论】:

    【解决方案2】:

    如果您使用的是 pandas 数据框,那么您可以使用以下内容:

    import pandas as pd
    
    all_transcripts['filtered']= all_transcripts.replace([amsterdam', 'rotterdam', 'den haag', 'haarlem', 'groningen'], "woonplaats", regex=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多