You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中提取印地语文本的视觉字符(解决拆分异常)

解决印地语视觉字符(字形簇)拆分问题

你遇到的核心问题是Unicode组合字符与视觉字形簇的差异:印地语使用的天城文里,部分视觉上的单个字符由多个Unicode码点组合而成(比如「न्दू」是न+्+द+ू四个码点的组合)。普通的list()方法按单个Unicode码点拆分,所以得到6个元素;而记事本是按**视觉字形簇(Grapheme Cluster)**计数,也就是你看到的3个独立视觉单元。

下面是两种可靠的解决方法:

方法1:用regex库匹配字形簇(推荐)

Python标准库的re不支持字形簇匹配,但第三方库regex支持\X模式(专门匹配完整的视觉字形),步骤如下:

  1. 安装依赖:
pip install regex
  1. 代码实现:
import regex

word = "बन्दूक"
visual_chars = regex.findall(r'\X', word)
print(visual_chars)  # 输出: ['ब', 'न्दू', 'क']
print(len(visual_chars))  # 输出: 3

方法2:手动合并组合字符(无第三方依赖)

利用unicodedata模块判断字符类别,将组合标记(以'M'开头的Unicode类别,比如Mn、Mc)合并到前一个基础字符,实现字形簇拆分:

import unicodedata

def get_visual_chars(text):
    graphemes = []
    current_cluster = []
    for char in text:
        # 组合标记属于附属字符,合并到当前字形簇
        if unicodedata.category(char).startswith('M'):
            if current_cluster:
                current_cluster.append(char)
            else:
                graphemes.append(char)
        else:
            if current_cluster:
                graphemes.append(''.join(current_cluster))
            current_cluster = [char]
    # 处理最后一个字形簇
    if current_cluster:
        graphemes.append(''.join(current_cluster))
    return graphemes

word = "बन्दूक"
result = get_visual_chars(word)
print(result)  # 输出: ['ब', 'न्दू', 'क']
print(len(result))  # 输出: 3

内容的提问来源于stack exchange,提问作者Andres Miguel Campos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 16:15:07