如何解决Python中僧伽罗语单词isalpha()返回结果不准确的问题?
解决僧伽罗语单词isalpha()判断错误的问题
问题原因
Python的str.isalpha()方法仅将Unicode类别为字母(以L开头,如Lu、Ll)的字符视为字母,而僧伽罗语中的元音附标(比如单词කෑම里的ෑ)属于非间距组合标记(Mn类),这类字符不会被isalpha()识别为字母,导致包含此类标记的僧伽罗语单词返回False。
解决方法
自定义判断函数,直接检查字符是否属于僧伽罗语的Unicode编码范围(U+0D80 至 U+0DFF),该范围内包含僧伽罗语的字母、元音附标等所有相关字符,能准确判断是否为僧伽罗语单词。
实现代码
def is_sinhala_word(word): # 僧伽罗语Unicode编码范围:0x0D80 到 0x0DFF return all(0x0D80 <= ord(char) <= 0x0DFF for char in word) # 测试示例 for word in ['මට', 'කෑම', 'කන්න', 'ඕන']: print(is_sinhala_word(word))
输出结果
True True True True
扩展:判断句子中的僧伽罗语单词
如果需要从混有英语的句子中筛选僧伽罗语单词,可以结合分词逻辑:
def extract_sinhala_words(sentence): sinhala_words = [] for word in sentence.split(): if is_sinhala_word(word): sinhala_words.append(word) return sinhala_words # 测试 sentence = "මට කෑම වേണේ I need food" print(extract_sinhala_words(sentence)) # 输出: ['මට', 'කෑම', 'වേണේ']
内容的提问来源于stack exchange,提问作者cmgchess
相关产品推荐
相关产品推荐

