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

Python中仅匹配印地语(天城文)字符的正则及分词器优化问题

解决印地语文本分词与非印地语过滤问题

核心思路

要实现保留完整印地语词汇、过滤非印地语文本的需求,关键在于:

  • 精准匹配印地语Unicode字符范围(包含主字符与变音符号)
  • 避免按单个字符拆分,将连续的印地语字符视为完整词汇单元

方案一:基础正则过滤与分词

直接通过正则表达式提取所有连续的印地语字符序列,同时自动过滤非印地语内容:

import re

def extract_hindi_tokens(text):
    # 匹配所有连续的印地语字符(含主字符、变音符号、数字)
    hindi_pattern = r'[\u0900-\u097F]+'
    return re.findall(hindi_pattern, text)

# 测试示例
input_text = "मेरा नाम है राम sdsd or मैं भारत में रहता हूं"
print(extract_hindi_tokens(input_text))
# 输出: ['मेरा', 'नाम', 'है', 'राम', 'मैं', 'भारत', 'में', 'रहता', 'हूं']

方案二:专业印地语分词库(更精准)

如果需要对复合词、复杂句式做更细致的分词,可以使用indic-nlp-library,它专门针对印度语言优化,能正确识别印地语词汇结构:

  1. 先安装库:
pip install indic-nlp-library
  1. 实现代码:
import re
from indicnlp.tokenize import indic_tokenize

def tokenize_hindi_text(text):
    # 第一步:过滤非印地语字符,仅保留印地语字符与空格
    cleaned_text = re.sub(r'[^\u0900-\u097F\s]', '', text)
    # 第二步:使用印地语专用分词器拆分词汇
    tokens = indic_tokenize.trivial_tokenize(cleaned_text, lang='hi')
    # 移除空字符串(清理后可能产生的无效内容)
    return [token for token in tokens if token.strip()]

# 测试示例
input_text = "मेरा नाम है राम sdsd or मैं भारत में रहता हूं"
print(tokenize_hindi_text(input_text))

问题原因分析

之前的实现大概率是按单个字符拆分文本,而印地语的变音符号(如ि、्、ी、ं)属于Unicode中的附属组合字符,单独拆分就会脱离主字符成为独立单元。通过匹配连续的印地语Unicode块(\u0900-\u097F),就能将主字符与附属变音符号视为一个完整的词汇片段。

内容的提问来源于stack exchange,提问作者Ikshan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:45:53