如何通过编程正确拆分带停顿标记的阿拉伯语文本
解决阿拉伯字符串拆分时停顿标记与单词分离的问题
问题描述
拆分阿拉伯字符串时,使用普通空格拆分(split(" "))会将停顿标记ۛ与前面的单词强制分离,即便标记和单词之间无空格也会出现该问题。例如:
- 原字符串:
"ذَٰلِكَ ٱلْكِتَـٰبُ لَا رَيْبَ ۛ فِيهِ ۛ هُدًى لِّلْمُتَّقِينَ" split(" ")执行结果:['ذَٰلِكَ', 'ٱلْكِتَـٰبُ', 'لَا', 'رَيْبَ', 'ۛ', 'فِيهِ', 'ۛ', 'هُدًى', 'لِّلْمُتَّقِينَ']- 期望结果:
['ذَٰلِكَ', 'ٱلْكِتَـٰبُ', 'لَا', 'رَيْبَ ۛ', 'فِيهِ ۛ', 'هُدًى', 'لِّلْمُتَّقِينَ']
解决方案
使用正则表达式的负向零宽断言拆分字符串,仅在停顿标记ۛ之外的空格处执行拆分,从而保留标记与前置单词的绑定关系。
以Python为例,代码实现如下:
import re arabic_str = "ذَٰلِكَ ٱلْكِتَـٰبُ لَا رَيْبَ ۛ فِيهِ ۛ هُدًى لِّلْمُتَّقِينَ" # 匹配"前面不是ۛ的空格"作为拆分点 split_result = re.split(r'(?<!ۛ) ', arabic_str) print(split_result)
执行后输出符合预期的结果:
['ذَٰلِكَ', 'ٱلْكِتَـٰبُ', 'لَا', 'رَيْبَ ۛ', 'فِيهِ ۛ', 'هُدًى', 'لِّلْمُتَّقِينَ']
原理说明
正则表达式(?<!ۛ) 中的(?<!ۛ)是负向零宽后行断言,它会判断当前空格的前置字符是否为ۛ:
- 若前置字符是
ۛ,则跳过该空格,不进行拆分; - 若前置字符不是
ۛ,则将该空格作为拆分分隔符。
通过这种方式,既能保留رَيْبَ ۛ、فِيهِ ۛ这类组合的完整性,又能正常拆分其他位置的空格。
内容的提问来源于stack exchange,提问作者Tarikul Islam Tuhin
相关产品推荐
相关产品推荐

