Предварительная обработка текста + Python + CSV: удаление специальных символов из столбца CSV

1

Я работаю над проблемой классификации текста. В моем CSV файле содержится столбец "описание", который описывает события. К сожалению, эта колонка полна специальных символов, кроме английских слов. Иногда все поле в строке заполнено такими символами, или иногда несколько слов имеют такие специальные символы, а остальные - английские слова. Я показываю вам два поля образца двух разных строк:

हर वर्ष की तरह इस वर्ष भी सिंधु सेना द्वारा आयोजित सिंधी प्रीमियर लीग फुटबॉल टूर्नामेंट का आयोजन एमबीएम ग्राउंड में करने जा रही है जिसमें अंडर-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)?

Теги:
csv
text-classification
text-processing
python-textprocessing

3 ответа

2

Вы можете сделать это, используя регулярное выражение. Предполагая, что вы смогли извлечь текст из файла 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 

Чтобы понять выражение регулярного выражения, см. Здесь.

1

Вы можете кодировать строку в ascii и ignore ошибки.

>>> 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 '
0

Вы можете использовать pandas для чтения csv файла в dataframe. с помощью:

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!" # $% &\'() * +, -./:; <=>? @[\] ^ _' {|} ~ '

  • 0
    Так как мне нужны только английские слова для формирования пакета слов, я должен использовать это регулярное выражение "[A-Za-z] *"? Если я могу, то какой будет модифицированная версия вашего кода?
  • 1
    если вы предпочитаете регулярное выражение, посмотрите пример, который я добавил
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню