Python3:去除阿拉伯标点符号

4

我正在处理阿拉伯文本,我想去掉阿拉伯标点符号。例如:

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

我希望输出中也能去掉" ؟ ، ",因为当我使用以下代码时:

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

输出结果是'在这个实验中,你好世界。标点符号和编号?我不记得了'

2个回答

7
string.punctuation常量仅包含ASCII定义的标点符号,甚至不涵盖与拉丁字母一起使用的所有符号(例如,“fancy quotes”如«»缺失)。
如果您不想自己创建所有标点符号的列表(我也不想),则可以使用Unicode字符属性来确定一个字符是否为标点符号。 内置的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'))
'أهلاً بالعالم في هذه التجربة  علامات الترقيم   لا اتذكرها'

5

我曾经遇到类似的问题,后来看到了这篇文章。以下是我用来解决问题的代码,希望对你有所帮助。

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

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

print(new_s)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接