我有一个阿拉伯语句子数据集,我想删除非阿拉伯语字符或特殊字符。我在python中使用了此正则表达式:
text = re.sub(r'[^ء-ي0-9]',' ',text)
它可以正常工作,但是在某些句子中(整个数据集中有4种情况),正则表达式也删除了阿拉伯语单词!
我使用Panda(python软件包)读取数据集,例如:
train = pd.read_excel('d.xlsx', encoding='utf-8')
出什么问题了?
------------------编辑:
示例中的句子:
انابحكيرجعومباركواعملوحفلةواحرقوهابالمعازيمولماالاخوانيروحو يعزواحرقوالعزا-احسنلكموالله#مصر
ﺷﻔﻴﻖ..ﺃﺣﻨﺍ ﺃﺣﻨﺍ ﻳﺎ #ﻣﺴﺨﺮﺓ#ﻋﺒﺚ #EgyPresident#埃及(Egypt)
答案 0 :(得分:2)
那些错误包含的字符不在阿拉伯语(U + 0621..U + 64A)的通用 Unicode范围内,但会以其初始,中间和最终形式进行“硬编码”。 / p>
与基于拉丁文的语言中的大写字母相比,但更为严格的是,阿拉伯语文字以特殊的“蓬勃发展”形式表示单词的开头和结尾。此外,它还允许采用“隔离”形式(当字符不是完整单词的一部分时使用)。
通常 在文件中被编码为'an'阿拉伯字符,而实际的初始,中间或最终形式的呈现将留给文本呈现器,但是由于所有形式也都具有Unicode代码点自己也可以“硬编码”确切的形式。那就是您遇到的:这两种系统的混合。
幸运的是,硬编码形式的Unicode范围也是固定值:
阿拉伯语表示形式-A是Unicode块,用于编码波斯语,乌尔都语,信德语和中亚语言所需的上下文形式和字母变体的连字。表示形式仅用于与旧标准(例如,DOS中使用的代码页864)兼容,并且通常以视觉而非逻辑顺序使用。
(https://en.wikipedia.org/wiki/Arabic_Presentation_Forms-A)
及其范围是U + FB50..U + FDFF(演示文稿形式A)和U + FE70..U + FEFC(演示文稿形式B)。如果您将这些范围添加到排除集中,则正则表达式将不再删除这些文本:
[^0-9\u0621-\u064a\ufb50-\ufdff\ufe70-\ufefc]
取决于您的浏览器和/或编辑器,选择此文本进行复制和粘贴时可能会遇到问题。显式使用指定确切字符的字符串可能更清楚:
{{1}}
答案 1 :(得分:0)
我尝试了Pythex,并发现了它(在Regular Expression Arabic characters and numbers only的帮助下):[\u0621-\u064A0-9]
捕获了几乎所有非阿拉伯字符。出于未知的原因,它不会捕获“ y”,因此您必须自己添加:[\u0621-\u064A0-9y]
这可以捕获所有非阿拉伯字符。对于特殊字符,很抱歉,但除了将它们添加到[\u0621-\u064A0-9y#\!\?\,]