Обнаружение арабских символов в регулярных выражениях

1

У меня есть набор арабских предложений, и я хочу удалить неарабские символы или специальные символы. Я использовал это регулярное выражение в python:

text = re.sub(r'[^ء-ي0-9]',' ',text)

Он работает отлично, но в некоторых предложениях (4 случая из всего набора данных) регулярное выражение также удаляет арабские слова!

Я прочитал набор данных, используя Panda (пакет python), например:

train = pd.read_excel('d.xlsx', encoding='utf-8')

Чтобы показать вам фотографию, я протестировал сайт Pythex: Изображение 174551

В чем проблема?

------------------ Отредактировано:

Предложения в примере:

انا بحكي رجعو مبارك واعملو حفلة واحرقوها بالمعازيم ولما الاخوان يروحو يعزو احرقو العزا - احسنلكم والله # مصر

شفيق أردوغان مصر..أحنا نبقى مين يا دادا? # مسخرة # عبث #EgyPresident #Egypt # مقاطعون لا يا حبيبي ما حزرت: بشار غبي بوجود بعثة أنان حاب يفضح روحه انه مجرم من هيك نفذ المجزرة لترى البعثة اجرامه بحق السورين

Теги:
python-3.x

2 ответа

2
Лучший ответ

Неправильно введенные символы не входят в общий диапазон 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]
  • 0
    спасибо .. отлично работает
0

Я попробовал Pythex, и я нашел это (с помощью регулярных выражений арабских символов и цифр): [\u0621-\u064A0-9] которые улавливают почти все неарабские символы. По неизвестной причине, этот dosen't поймать 'y', поэтому вы должны добавить его сами: [\u0621-\u064A0-9y] Это может поймать весь неарабский характер. Для специального характера, извините, но я ничего не нашел, кроме как добавить их внутрь: [\u0621-\u064A0-9y#\!\?\,]

Ещё вопросы

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