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

2024-06-25 22:43:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有以下字符串值的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. 如果第一个问题的答案是否定的,那么有没有办法重新插入原来的标点符号??如果是这样,我怎么办?

事先非常感谢


Tags: 字符串instringir标点符号plazadiagonalmadrid
1条回答
网友
1楼 · 发布于 2024-06-25 22:43:30

看来你需要。你知道吗

例如:

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,']

相关问题 更多 >