我正在使用阿拉伯语文本,我想删除阿拉伯语标点符号 示例:
s="أهلاً بالعالم في هذه التجربة ! علامات ،الترقيم ؟ ,? لا .اتذكرها"
我希望输出也删除" ؟ ، "
因为当我使用时:
import string
tr= str.maketrans("","", string.punctuation)
输出为'أهلاً بالعالم في هذه التجربة علامات ،الترقيم ؟ لا اتذكرها'
答案 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'))
'أهلاً بالعالم في هذه التجربة علامات الترقيم لا اتذكرها'