Как я могу удалить повторяющиеся слова в строке с Python? - PullRequest
19 голосов
/ 17 октября 2011

Следующий пример:

string1 = "calvin klein design dress calvin klein"

Как удалить вторые два дубликата "calvin" и "klein"?

Результат должен выглядеть как

string2 = "calvin klein design dress"

должны быть удалены только вторые дубликаты, а последовательность слов не должна изменяться!

Ответы [ 12 ]

32 голосов
/ 17 октября 2011
string1 = "calvin klein design dress calvin klein"
words = string1.split()
print (" ".join(sorted(set(words), key=words.index)))

Сортирует набор всех (уникальных) слов в вашей строке по индексу слова в исходном списке слов.

18 голосов
/ 17 октября 2011
def unique_list(l):
    ulist = []
    [ulist.append(x) for x in l if x not in ulist]
    return ulist

a="calvin klein design dress calvin klein"
a=' '.join(unique_list(a.split()))
10 голосов
/ 17 октября 2011

В Python 2.7+ вы можете использовать collections.OrderedDict для этого:

from collections import OrderedDict
s = "calvin klein design dress calvin klein"
print ' '.join(OrderedDict((w,w) for w in s.split()).keys())
7 голосов
/ 17 октября 2011

Вырезать и вставить из рецептов itertools

from itertools import ifilterfalse

def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in ifilterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element

Я действительно хотел бы, чтобы они могли сделать модуль из этих рецептов в ближайшее время. Я бы очень хотел иметь возможность делать from itertools_recipes import unique_everseen вместо использования вырезания и вставки каждый раз, когда мне что-то нужно.

Используйте вот так:

def unique_words(string, ignore_case=False):
    key = None
    if ignore_case:
        key = str.lower
    return " ".join(unique_everseen(string.split(), key=key))

string2 = unique_words(string1)
5 голосов
/ 17 октября 2011
string = 'calvin klein design dress calvin klein'

def uniquify(string):
    output = []
    seen = set()
    for word in string.split():
        if word not in seen:
            output.append(word)
            seen.add(word)
    return ' '.join(output)

print uniquify(string)
2 голосов
/ 17 октября 2011

Вы можете использовать набор для отслеживания уже обработанных слов.

words = set()
result = ''
for word in string1.split():
    if word not in words:
        result = result + word + ' '
        words.add(word)
print result
0 голосов
/ 09 ноября 2018
string2 = ' '.join(set(string1.split()))

Объяснение :

.split() - это метод разделения строки на список (без параметров она разделяется пробелами)
set() - этотип неупорядоченных коллекций, исключающих повторяющиеся числа
'separator'.join(list) - означает, что вы хотите объединить список из параметров в строку с разделителем между элементами

0 голосов
/ 09 ноября 2018

Вы можете сделать это, просто получив набор, связанный со строкой, которая является математическим объектом, не содержащим повторяющихся элементов по определению.Достаточно объединить слова в наборе обратно в строку:

def remove_duplicate_words(string):
    return ' '.join(set(string.split()))
0 голосов
/ 25 июня 2018

Вы можете удалить повторяющиеся или повторяющиеся слова из текстового файла или строки, используя следующие коды -

from collections import Counter
for lines in all_words:

    line=''.join(lines.lower())
    new_data1=' '.join(lemmatize_sentence(line))
    new_data2 = word_tokenize(new_data1)
    new_data3=nltk.pos_tag(new_data2)

    # below code is for removal of repeated words

    for i in range(0, len(new_data3)):
        new_data3[i] = "".join(new_data3[i])
    UniqW = Counter(new_data3)
    new_data5 = " ".join(UniqW.keys())
    print (new_data5)


    new_data.append(new_data5)


print (new_data)

PS - Делайте идентификаторы в соответствии с необходимостью.Надеюсь, это поможет !!!

0 голосов
/ 17 июня 2018

Вопрос: Удалить дубликаты в строке

 from _collections import OrderedDict

    a = "Gina Gini Gini Protijayi"

    aa = OrderedDict().fromkeys(a.split())
    print(' '.join(aa))
   # output => Gina Gini Protijayi
...