Удаление строк с одинаковыми словами.

Submitted by smartking on Fri, 09/09/2016 - 19:30

В одном из проектов, встала задача отфильтровать дубликаты тегов. Добликатами в данной задаче считались, как точные соответсвия строк, так и те строки, где слова одинаковые, но могут идти в разном порядке.

Примеры дубликатов:

  1. word1 word2 word3
  2. word2 word1 word3(дубль строки 1)
  3. word3 word2
  4. и т.д.

Набросал небольшой скрипт на python. Разбив строку на слова, отсортировав полученный массив и посчитав md5-сумму строки. Дубликаты мд5-суммы считал, как дубликаты строк.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import os
import time
import hashlib

data_in  = 'test.csv'
data_out = 'test_uniq.csv'

import csv
new_lines = []

def create_hash_str(key):
    key = key.split(" ")
    key.sort()
    key = "".join(key)
    key = hashlib.md5(key).hexdigest()
    return key

hashs = set()
with open(data_in) as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:   
        hashKey = create_hash_str(row[0])
        if(hashKey not in hashs):
            hashs.add(hashKey)
            new_lines.append({'key': row[0], 'md5': hashKey})
            # print Only the resulting keywords
            # print row[0]

with open(data_out, 'w') as csvfile:
    fieldnames = ['key', 'md5']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for line in new_lines:
        writer.writerow(line)
Tags

Add new comment

Image CAPTCHA