【问题标题】:Text Pre-processing + Python + CSV : Removing special characters from a column of a CSV文本预处理 + Python + CSV:从 CSV 的列中删除特殊字符
【发布时间】:2019-02-27 23:08:14
【问题描述】:

我正在研究一个文本分类问题。我的 CSV 文件包含一个名为“description”的列,用于描述事件。不幸的是,除了英文单词之外,该栏还充满了特殊字符。有时一行中的整个字段都充满了这样的字符,或者有时只有几个单词是这样的特殊字符,其余的都是英文单词。我正在向您展示两个不同行的两个样本字段:

हर वर्ष की तरह इस वर्ष भी सिंधु सेना द्वारा आयोजित सिंधी प्रीमियर लीग फुटबॉल टूर्नामेंट का आयोजन एमबीएम ग्राउंड में करने जा रही है जिसमें अंडर-19 टीमें भाग लेती है आप सभी से निवेदन है समाज के युवाओं को प्रोत्साहन करने अवश्य पधारें

Unwind on the strums of Guitar &  immerse your soul into the magical vibes of music! ️? ️?..Guitar Night By Ashmik Patil.July 19, 2018.Thursday.9 PM Onwards.*Cover charges applicable...#GuitarNight #MusicalNight #MagicalMusic #MusicLove #Party #Enjoy #TheBarTerminal #Mumbaikars #Mumbai

在第一种情况下,整个字段都充满了这种不可读的字符,而在第二种情况下,只有很少的这种字符存在。其余都是英文单词。

我只想删除那些保持英文单词不变的特殊字符,因为我需要这些英文单词在稍后阶段形成一个单词包。

如何用 Python 实现(我使用的是 jupyter notebook)?

【问题讨论】:

    标签: python csv text-classification text-processing


    【解决方案1】:

    您可以将您的字符串编码为asciiignore 错误。

    >>> text = 'Something with special characters á┬ñ┬╡├á┬ñ┬░├á┬Ñ┬ì├á┬ñ┬╖'
    >>> text = text.encode('ascii', 'ignore')
    

    这将为您提供一个二进制对象,您可以将其再次解码为utf

    >>> text
    b'Something with special characters '
    
    >>> text = text.decode('utf')
    >>> text
    'Something with special characters '
    

    【讨论】:

      【解决方案2】:

      您可以使用 pandas 将 csv 文件读入数据帧。使用:

      import pandas as pd 
      df = pd.read_csv(fileName,convertor={COLUMN_NUMBER:func})
      

      其中 func 是一个接受单个字符串并删除特殊字符的函数。 这可以通过不同的方式完成,使用正则表达式,但这里是一个简单的方法

      import string
      def func(strg):
          return ''.join(c for c in strg if c in string.printable[:-5])
      

      或者,您可以先读取数据框,然后申请更改描述列。即。

      import pandas as pd 
      df = pd.read_csv(fileName)
      df['description'] = df['description'].apply(func)
      

      或使用正则表达式

      df['description'] = df['description'].str.replace('[^A-Za-z _]','')
      

      string.printable[:-5 ] 是字符集 '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;?@[\]^_`{|}~ '

      【讨论】:

      • 因为我只需要英文单词来组成单词包,我应该使用这个正则表达式 "[A-Za-z]*" 吗?如果可以,那么您的代码的修改版本是什么?
      • 如果您更喜欢正则表达式,请参阅我添加的示例
      • 1) 为什么要使用 [^A-Za-z _]? [^A-Za-z] 很好,ri8? 2) 我们应该使用 df['description'] = df['description'].str.replace('[^A-Za-z _]',' ') 而不是 df['description'] = df['描述'].str.replace('[^A-Za-z _]','')...ri8? (最后一个参数从 '' 更改为 ''。)
      【解决方案3】:

      您可以使用regex 来执行此操作。假设您已经能够从 CSV 文件中取出文本 -

      #python 2.7
      import re
      text = "Something with special characters á┬ñ┬╡├á┬ñ┬░├á┬Ñ┬ì├á┬ñ┬╖"
      cleaned_text = re.sub(r'[^\x00-\x7f]+','', text)
      print cleaned_text
      
      Output - Something with special characters 
      

      要了解所使用的正则表达式,refer here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-22
        • 2021-07-15
        • 2018-12-14
        • 1970-01-01
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多