首页 > 解决方案 > 删除数据集中的符号

问题描述

我应用了所有预处理步骤,但我想删除包含英文单词或特定符号的行,只是我想要没有这些符号的阿拉伯语单词或我在下面的代码中提到的英文单词。我应用了代码,但是当我在清理后打印数据集时,它仍然没有清理!我想删除它而不是替换它。

lexicon = pd.read_csv(r"C:\Users\User\Python Code\data.csv")
lexicon.head(10)

#output
    Vocabulary
0   [PAD]
1   [UNK]
2   [CLS]
3   [SEP]
4   [MASK]
5   !
6   #
7   $
8   %
9   &

lexicon['clean_tweet'] = lexicon.Vocabulary.str.replace('[^\w\s#@/:%.,_-]', '', flags=re.UNICODE) #removes emojis
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace('@[_A-Za-z0-9]+', '') #removes handles
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace('[A-Za-z0-9]+', '') #removes english
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace('#',' ') #removes hashtag symbol only
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace(r'http\S+', '', regex=True).replace(r'www\S+', '', regex=True) #removes links
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace('\d+', '') #removes numbers
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace('\n', ' ') #removes new line
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace('_', '') #removes underscore
lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace('[^\w\s]','') #removes punctuation
lexicon.head(10)

# Vocabulary    clean_tweet
0   [PAD]   
1   [UNK]   
2   [CLS]   
3   [SEP]   
4   [MASK]  
5   !   
6   #   
7   $   
8   %   
9   &   

我想删除所有包含这些符号或任何语言的行,只是我需要阿拉伯语单词,还是有另一种简单的方法来检测阿拉伯语单词?

注意:如果该行包含阿拉伯语单词和符号,我只想删除没有阿拉伯语单词的符号。

标签: pythonregexpandas

解决方案


按照这个 SO answer,阿拉伯字母的 Unicode 正则表达式范围是:

[\u0627-\u064a]

我们可以尝试使用这个字符类的否定版本以及str.replace

lexicon['clean_tweet'] = lexicon.clean_tweet.str.replace(r'[^\u0627-\u064a]', '')

如果您想保留空白字符或其他标点符号,则可以尝试使用此正则表达式:

[^\u0627-\u064a\s!?.-]

推荐阅读