Удалите специальные символы, числа в арабском текстовом файле с помощью Python
Я хочу сохранить только арабские символы, без цифр, я получил эту инструкцию регулярного выражения из github.
generalPath="C:/Users/Desktop/Code/dataset/"
outputPath= "C:/Users/Desktop/Code/output/"
files = os.listdir(generalPath)
for onefile in files:
# relative or absolute file path, e.g.:
localPath=generalPath+onefile
localOutputPath=outputPath+onefile
print(localPath)
print(localOutputPath)
with open(localPath, 'rb') as infile, open(localOutputPath, 'w') as outfile:
data = infile.read().decode('utf-8')
new_data = t = re.sub(r'[^0-9\u0600-\u06ff\u0750-\u077f\ufb50-\ufbc1\ufbd3-\ufd3f\ufd50-\ufd8f\ufd50-\ufd8f\ufe70-\ufefc\uFDF0-\uFDFD]+', ' ', data)
outfile.write(new_data)
В этом коде я получил эту ошибку: Traceback (последний вызов последним): файл ".\ CleanText.py", строка 23, в файле outfile.write(new_data) "C:\ProgramData\Anaconda3\lib\encodings\cp1252.py", строка 19, в кодеках возврата encode.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: кодек 'charmap' не может кодировать символы в позиции 0-2: символы отображаются в
мой арабский текст диакритизирован, и я хочу, чтобы он оставался таким
1 ответ
Похоже, ваша программа пытается прочитать ваш текстовый файл в кодировке CP1252 вместо UTF-8. Укажите юникод при открытии, как показано ниже. Кроме того, поскольку это текстовый файл, вы можете прочитать его, используя'r'
вместо того 'rb'
.
with open(localPath, 'r', encoding='utf8') as infile
Что касается вашего регулярного выражения, если вы просто хотите удалить числа, вы можете использовать
data = re.sub(r'[0-9]+', '', data)
Вам не нужно указывать весь арабский алфавит как символы, которые нужно сохранить. Но похоже, что у вас есть строки типа "(1/6)". Чтобы избавиться от скобок и косых черт, используйте:
data = re.sub(r'[0-9\(\)/]+', '', data)