Удалить повторяющиеся слова, но сохранить повторяющиеся числа в предложении - PullRequest
0 голосов
/ 18 января 2019

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

Ранее я использовал следующее для удаления дубликатов, сохраняя при этом порядок, но при этом удаляются одиночные повторяющиеся числа.

df['reporting_name'] = df['reporting_name'].str.split().apply(lambda x: OrderedDict.fromkeys(x).keys() if x is not None else None).str.join(' ')

Итак, я думаю, что мне нужно какое-то регулярное выражение для разбиения, когда за словом следует число (включая пробел), что-то вроде this . Или, возможно, есть другое общее решение.

Input

"East Zone Mbc26 East Zone 1 2nd S11B Smds Smoke Damper 1 Status"
"GF Command Room 1 Unit 1 Flow Temperature Temperature"

Ожидаемый результат

"East Zone Mbc26 Zone 1 2nd S11B Smds Smoke Damper 1 Status"
"GF Command Room 1 Unit 1 Flow Temperature"

Дублирующиеся слова удаляются, номера сохраняются, а порядок слов сохраняется.

Если слово имеет идентификатор и является дубликатом, таким как «Зона 1», тогда сохраняются и «Зона», и «Зона 1».

1 Ответ

0 голосов
/ 18 января 2019

Это должно сработать, если вы хотите сохранить первое вхождение каждого нецифрового слова. Вы всегда можете обмануть условие, чтобы получить максимум две цифры.

def cleanup(s):
    words = set()
    for (word, nextword) in zip(s.split(), s.split()[1:] + [None]):
        if word.isdigit():
            yield word
            continue
        if not word in words:
            words.add(word)
            yield word
        elif nextword and nextword.isdigit():
            yield word


print ' '.join(cleanup("East Zone Mbc26 East Zone 1 2nd S11B Smds Smoke Damper 1 Status"))
print ' '.join(cleanup("GF Command Room 1 Unit 1 Flow Temperature Temperature"))

выход

East Zone Mbc26 Zone 1 2nd S11B Smds Smoke Damper 1 Status
GF Command Room 1 Unit 1 Flow Temperature
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...