У меня есть набор арабских предложений, и я хочу удалить неарабские символы или специальные символы. Я использовал это регулярное выражение в python:
text = re.sub(r'[^ء-ي0-9]',' ',text)
Он работает отлично, но в некоторых предложениях (4 случая из всего набора данных) регулярное выражение также удаляет арабские слова!
Я прочитал набор данных, используя Panda (пакет python), например:
train = pd.read_excel('d.xlsx', encoding='utf-8')
Чтобы показать вам фотографию, я протестировал сайт Pythex:
В чем проблема?
------------------ Отредактировано:
Предложения в примере:
انا بحكي رجعو مبارك واعملو حفلة واحرقوها بالمعازيم ولما الاخوان يروحو يعزو احرقو العزا - احسنلكم والله # مصر
شفيق أردوغان مصر..أحنا نبقى مين يا دادا? # مسخرة # عبث #EgyPresident #Egypt # مقاطعون لا يا حبيبي ما حزرت: بشار غبي بوجود بعثة أنان حاب يفضح روحه انه مجرم من هيك نفذ المجزرة لترى البعثة اجرامه بحق السورين
Неправильно введенные символы не входят в общий диапазон Unicode для арабского языка (U + 0621..U + 64A), но "жестко закодированы" как их исходные, медиальные и окончательные формы.
Сопоставимый с капитализацией на латинских языках, но более строгий, чем это, арабское письмо указывает как начало, так и конец слов со специальной формой "расцвета". Кроме того, он также позволяет "изолированную" форму (используется, когда символ не является частью полного слова).
Обычно это кодируется в файле как "арабский" арабский символ, а фактический рендеринг в начальной, медиальной или конечной форме остается в текстовом рендерере, но поскольку все формы также имеют собственные кодовые страницы Unicode, также возможно " hardcode "точные формы. Это то, с чем вы столкнулись: сочетание этих двух систем.
К счастью, диапазоны Unicode для жестко закодированных форм также являются фиксированными значениями:
Arabic Forms-A - это кодировка Unicode, кодирующая контекстные формы и лигатуры буквенных вариантов, необходимых для персидского, урду, синдхи и среднеазиатских языков. Формы представления присутствуют только для совместимости со старыми стандартами, такими как кодовая страница 864, используемая в DOS, и обычно используются в визуальном и не логическом порядке.
(https://en.wikipedia.org/wiki/Arabic_Presentation_Forms-A)
и их диапазоны U + FB50..U + FDFF (Презентационные формы A) и U + FE70..U + FEFC (Формы представления B). Если вы добавите эти диапазоны в свой набор исключений, регулярное выражение больше не будет удалять эти тексты:
[^ء-ي0-9ﭐ-﷿ﹰ-ﻼ]
В зависимости от вашего браузера и/или редактора у вас могут возникнуть проблемы с выбором этого текста для его копирования и вставки. Может быть более явным явным образом использовать строку, определяющую точные символы:
[^0-9\u0621-\u064a\ufb50-\ufdff\ufe70-\ufefc]
Я попробовал Pythex, и я нашел это (с помощью регулярных выражений арабских символов и цифр): [\u0621-\u064A0-9]
которые улавливают почти все неарабские символы. По неизвестной причине, этот dosen't поймать 'y', поэтому вы должны добавить его сами: [\u0621-\u064A0-9y]
Это может поймать весь неарабский характер. Для специального характера, извините, но я ничего не нашел, кроме как добавить их внутрь: [\u0621-\u064A0-9y#\!\?\,]