我正在处理阿拉伯文本,我想去掉阿拉伯标点符号。例如:
s="أهلاً بالعالم في هذه التجربة ! علامات ،الترقيم ؟ ,? لا .اتذكرها"
我希望输出中也能去掉" ؟ ، "
,因为当我使用以下代码时:
import string
tr= str.maketrans("","", string.punctuation)
输出结果是'在这个实验中,你好世界。标点符号和编号?我不记得了'
我正在处理阿拉伯文本,我想去掉阿拉伯标点符号。例如:
s="أهلاً بالعالم في هذه التجربة ! علامات ،الترقيم ؟ ,? لا .اتذكرها"
我希望输出中也能去掉" ؟ ، "
,因为当我使用以下代码时:
import string
tr= str.maketrans("","", string.punctuation)
输出结果是'在这个实验中,你好世界。标点符号和编号?我不记得了'
string.punctuation
常量仅包含ASCII定义的标点符号,甚至不涵盖与拉丁字母一起使用的所有符号(例如,“fancy quotes”如«»缺失)。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'))
'أهلاً بالعالم في هذه التجربة علامات الترقيم لا اتذكرها'
我曾经遇到类似的问题,后来看到了这篇文章。以下是我用来解决问题的代码,希望对你有所帮助。
s="أهلاً بالعالم في هذه التجربة ! علامات ،الترقيم ؟ ,? لا .اتذكرها"
new_s = s.translate(str.maketrans('', '', '?؟ً')) # add punctuation here
print(new_s)