Python 删除重复的单词,但在句子中保留重复的数字

Python 删除重复的单词,但在句子中保留重复的数字,python,regex,Python,Regex,我试图找出如何删除许多句子中的重复单词,但不删除一位数或两位数 我以前使用过以下方法来删除重复的数字,同时保留顺序,但这会删除单个重复的数字 df['reporting_name'] = df['reporting_name'].str.split().apply(lambda x: OrderedDict.fromkeys(x).keys() if x is not None else None).str.join(' ') 所以我想我需要一些正则表达式来拆分一个单词后面跟一个数字,包括空格

我试图找出如何删除许多句子中的重复单词,但不删除一位数或两位数

我以前使用过以下方法来删除重复的数字,同时保留顺序,但这会删除单个重复的数字

df['reporting_name'] = df['reporting_name'].str.split().apply(lambda x: OrderedDict.fromkeys(x).keys() if x is not None else None).str.join(' ')
所以我想我需要一些正则表达式来拆分一个单词后面跟一个数字,包括空格,比如。 或许还有另一种通用的解决方案

输入

预期产量

删除重复的单词,保留数字,并保持单词顺序


如果一个单词有标识符并且是重复的,例如区域1,则同时保留区域和区域1。

如果您希望保留每个非数字单词的第一次出现,则应该这样做。您总是可以欺骗条件,使其具有最多两个数字

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"))
输出


为什么要保留第一个东区和第二个区?你想这样做是为了一个字符串吗?3位数或更多的数字呢?花车?在减振器2状态下,输出改变了编号。这是打字错误吗?@Toto,我应该解释一下,我希望保留区域标识符,在本例中为1。因此,当一个标识符可用时,两者都可以保留。@Reti43,这确实是一个输入错误,整个句子是一个字符串,名称中不存在浮点数。您可以只做word.isdigit。我应该更明确一些,实际上我希望在第一句话中保留区域1和区域,否则,1可能会被误解。因此,只要重复的单词后面有一个标识符,就同时保留这两个标识符。
"East Zone Mbc26 Zone 1 2nd S11B Smds Smoke Damper 1 Status"
"GF Command Room 1 Unit 1 Flow Temperature"
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