如何删除字符串中的标点符号并在执行转换后将其重新插入

How can i remove the punctuation in a string and reinsert it back after performing transformations

我有一个 pandas 系列,其中包含以下字符串值(为简单起见,我选择将其显示为列表):

['quiero ir desde Calle Diagonal, 100, Barcelona, hasta Diagonal, 200, Barcelona',
 'quiero ir desde Plaza Catalunya, Barcelona, Barcelona, hasta Torrent Olla 218, Barcelona',
 'quiero ir desde Calle de Alcalá, 37, Madrid, hasta Puerta del Sol, 7, Madrid',
 'quiero ir desde Gran vía Corts Catalanes 290, Barcelona, hasta Plaza universitat, Barcelona',
 'quiero ir desde Carrer Rocafort, 160, Barcelona, hasta Plaça universitat, Barcelona',
 'quiero ir desde Calle paris, 62, Barcelona, hasta Entença metro, Barcelona',
 'quiero ir desde Urgell 1, Barna, hasta Paral.lel 190, Barna',]

我想删除这里重复的单词,但要做到这一点,我需要先删除标点符号:

# Remove punctuation

import string

l = []

for i in df["origin_destination"]:
    l.append(i.translate(str.maketrans('', '', string.punctuation)))

现在我可以删除重复的单词了:

# Remove Duplicates

def unique_string(l):
    ulist = []
    [ulist.append(x) for x in l if x not in ulist]
    return ulist

no_dup = []

for i in l:
    no_dup.append(' '.join(unique_string(i.split())))

这是我现在的结果:

['quiero ir desde Calle Diagonal 100 Barcelona hasta 200',
 'quiero ir desde Plaza Catalunya Barcelona hasta Torrent Olla 218',
 'quiero ir desde Calle de Alcalá 37 Madrid hasta Puerta del Sol 7',
 'quiero ir desde Gran vía Corts Catalanes 290 Barcelona hasta Plaza universitat',
 'quiero ir desde Carrer Rocafort 160 Barcelona hasta Plaça universitat',
 'quiero ir desde Calle paris 62 Barcelona hasta Entença metro',
 'quiero ir desde Urgell 1 Barna hasta Parallel 190',]

没关系,我现在的问题是我需要保留标点符号,但我还没有看到任何方法可以在不删除字符串中的标点字符的情况下删除重复的单词。所以我的问题是:

  1. 有没有办法在不删除标点符号的情况下从字符串中删除重复的单词?如果在这种情况下该怎么做?

  2. 如果第一个问题的答案是否定的,那么有什么办法可以将标点符号重新插入原来的位置吗?如果是这样我该怎么做?

非常感谢您

看来你需要。

例如:

import string
punc = string.punctuation

data = ['quiero ir desde Calle Diagonal, 100, Barcelona, hasta Diagonal, 200, Barcelona',
 'quiero ir desde Plaza Catalunya, Barcelona, Barcelona, hasta Torrent Olla 218, Barcelona',
 'quiero ir desde Calle de Alcalá, 37, Madrid, hasta Puerta del Sol, 7, Madrid',
 'quiero ir desde Gran vía Corts Catalanes 290, Barcelona, hasta Plaza universitat, Barcelona',
 'quiero ir desde Carrer Rocafort, 160, Barcelona, hasta Plaça universitat, Barcelona',
 'quiero ir desde Calle paris, 62, Barcelona, hasta Entença metro, Barcelona',
 'quiero ir desde Urgell 1, Barna, hasta Paral.lel 190, Barna']

result = []
for i in data:
    seen = set()
    temp = []
    for j in i.split():
        val = j.strip(punc)
        if val not in seen:
            temp.append(j)
            seen.add(val)
    result.append(" ".join(temp))

print(result)

输出:

['quiero ir desde Calle Diagonal, 100, Barcelona, hasta 200,',
 'quiero ir desde Plaza Catalunya, Barcelona, hasta Torrent Olla 218,',
 'quiero ir desde Calle de Alcalá, 37, Madrid, hasta Puerta del Sol, 7,',
 'quiero ir desde Gran vía Corts Catalanes 290, Barcelona, hasta Plaza '
 'universitat,',
 'quiero ir desde Carrer Rocafort, 160, Barcelona, hasta Plaça universitat,',
 'quiero ir desde Calle paris, 62, Barcelona, hasta Entença metro,',
 'quiero ir desde Urgell 1, Barna, hasta Paral.lel 190,']