Python3:删除阿拉伯语标点符号

时间:2018-01-29 08:06:49

标签: python python-3.x unicode

我正在使用阿拉伯语文本,我想删除阿拉伯语标点符号 示例:

s="أهلاً بالعالم في هذه التجربة ! علامات ،الترقيم ؟ ,? لا .اتذكرها"

我希望输出也删除" ؟ ، "因为当我使用时:

import string
tr= str.maketrans("","", string.punctuation) 

输出为'أهلاً بالعالم في هذه التجربة علامات ،الترقيم ؟ لا اتذكرها'

2 个答案:

答案 0 :(得分:5)

我正在研究类似的问题,并且偶然发现了这篇文章。这是我用来解决它的方法。希望这会有所帮助。

s="أهلاً بالعالم في هذه التجربة ! علامات ،الترقيم ؟ ,? لا .اتذكرها"

new_s = s.translate(str.maketrans('', '', '?؟ً')) # add punctuation here

print(new_s)

答案 1 :(得分:3)

string.punctuation常量仅包含ASCII中定义的标点字符,甚至不包括与拉丁文脚本一起使用的所有符号(例如,“花哨的引号”如«»缺失)。

如果您不想自己创建所有标点字符的列表(我不愿意),您可以使用Unicode character property来判断字符是否是标点符号。 内置的unicodedata模块可让您访问此信息:

>>> import unicodedata as ud
>>> for c in 'abc: قيم ؟':
...     print((c, ud.category(c))
a Ll
b Ll
c Ll
: Po
  Zs
ق Lo
ي Lo
م Lo
  Zs
؟ Po

所有类别都是双字母代码,例如“Ll”代表“字母,小写”或“Po”代表“标点符号,其他”。 所有标点符号都有一个以“P”开头的类别。

您可以使用此信息过滤掉标点字符(例如,使用生成器表达式):

>>> s = "أهلاً بالعالم في هذه التجربة ! علامات ،الترقيم ؟ ,? لا .اتذكرها"
>>> ''.join(c for c in s if not ud.category(c).startswith('P'))
'أهلاً بالعالم في هذه التجربة  علامات الترقيم   لا اتذكرها'