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,它专门针对印度语言优化,能正确识别印地语词汇结构:
- 先安装库:
pip install indic-nlp-library
- 实现代码:
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
相关产品推荐
相关产品推荐

