【问题标题】:Remove words made up of repetitive letters删除由重复字母组成的单词
【发布时间】:2019-03-30 18:11:54
【问题描述】:

我有一个包含文本数据的数据框列。它几乎没有完全由重复字母组成的单词,很少有其他单词部分由重复字母组成。我想删除由完全重复的字母组成的单词,并在数据框列中保留第一次出现的字母(如果重复字母的计数超过 2)。这该怎么做?例如,如果我的数据框有这样的词-

id   text
1     aaaa
2     bb
3     wwwwwwww
4     helloooo
5     see youuuu 

输出应该是-

id   text
1     
2     
3    
4    hello
5    see you 

【问题讨论】:

  • 有必要用停用词制作一个新列表吗?我不明白你想对数据框做什么。
  • @JacobFuchs .....没有必要用停用词制作新列表。我只是认为一种方法可以做到这一点。我想从数据框列中删除完全由相同重复“字母”组成的所有“单词”

标签: python regex nlp text-processing


【解决方案1】:

这可能不是特别优雅,也可能不是很快,但它确实有效。我希望它足以满足您的需求。

您生成一个根据您的需要对字符串进行排序的函数,然后使用 pandas 映射将其应用于您的所有元素,因此:

def clean(string):
    if (len(string)==0):
        return ''
    if (set(string) == set(string[0])):
        return ''    
    prev = None
    letters = [l for l in string]
    counter = 1
    new = []
    for l in letters:
        if l==prev:
            counter+=1
        else:
            if (counter==2):
                new.append(prev)
            counter=1
            new.append(l)
            prev = l
    return ''.join(new)

然后你可以这样做:

df['text'] = df['text'].fillna('').map(clean)

简单来说,你首先检查整个字符串是否在一个字母中(set 只会保留唯一的元素)。然后你开始遍历所有的字母,跳过重复但保持重复字母的计数。最后,当一个重复序列完成后,只有当重复次数正好为 2 时,您才能再添加一份副本。

我对此进行了测试并得到了预期的结果,但如果您确实遇到了一些我没想到检查的问题,请告诉我,我会解决它。

【讨论】:

  • 您可能有空单元格,我将添加一个检查条件,如果您仍然收到警告,请告诉我
猜你喜欢
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多