I have a pandas series with the following string values (For simplicity i have chosen to display it as a list):
['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',]
I want to remove the duplicated words here, but to do that, i need to remove the punctuation first:
# Remove punctuation
import string
l = []
for i in df["origin_destination"]:
l.append(i.translate(str.maketrans('', '', string.punctuation)))
Now i can remove duplicated words:
# 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())))
This is the result i have now:
['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',]
This is ok, my problem now is that i need to keep the punctuation but i haven't seen any way of removing duplicated words without stripping out the punctuation characters in the strings. So my questions are:
Is there any way of removing duplicated words from a string without removing the punctuation?? How to do that if so in this case?
If the answer for the first question was negative, is there any way then to reinsert back the punctuation characters where they were?? How could i do that if so?
Thank you very much in advance
Looks like you need.
Ex:
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)
Output:
['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,']