如何移除文本指定词汇并保留标点(孟加拉语文本处理)
解决孟加拉语文本中带标点目标词汇的移除问题
问题说明
现有Python代码可移除词表中的纯孟加拉语词汇,但无法处理末尾带有标点(,, ।, ?)的目标词汇。例如输入文本:
বিশ্বের তথা দূষিত না বায়ুর না, শহরের না।
当前代码仅能移除তথা和না,输出为:
বিশ্বের দূষিত বায়ুর না, শহরের না।
需要实现移除带标点的目标词汇同时保留标点,期望输出:
বিশ্বের দূষিত বায়ুর, শহরের।
解决方案
核心思路是拆分每个词的词汇主体和末尾标点,判断词汇是否属于移除列表:若是则仅保留标点;若否则保留完整的词(词汇+标点),最后调整标点与前序词汇的拼接逻辑,避免多余空格。
word_list = {'নিজের', 'তথা', 'না'} punctuations = {',', '।', '?'} def remove_w(text): processed_words = [] for word in text.split(): # 分离词汇主体与末尾的标点 clean_word = word trailing_punct = '' # 从词的末尾提取所有连续标点 while clean_word and clean_word[-1] in punctuations: trailing_punct = clean_word[-1] + trailing_punct clean_word = clean_word[:-1] # 根据词汇是否在移除列表处理内容 if clean_word not in word_list: processed_words.append(clean_word + trailing_punct) else: # 移除词汇,仅保留标点(如果存在) if trailing_punct: processed_words.append(trailing_punct) # 调整拼接逻辑:标点直接追加到前一个词汇后,避免空格 result = [] for item in processed_words: if item in punctuations and result: result[-1] += item else: result.append(item) return ' '.join(result) # 测试示例 input_text = 'বিশ্বের তথা দূষিত না বায়ুর না, শহরের না।' print(remove_w(input_text)) # 输出: বিশ্বের দূষিত বায়ুর, শহরের।
代码逻辑解析
- 标点分离:遍历每个词,从末尾提取所有连续的目标标点,将词汇主体与标点拆分
- 词汇判断:检查拆分后的词汇主体是否在移除列表中,决定保留完整词还是仅保留标点
- 拼接优化:处理标点的拼接方式,直接将标点追加到前一个词汇末尾,避免出现
বায়ুর ,这类不符合语法的空格
内容的提问来源于stack exchange,提问作者Ishrat Hossain
相关产品推荐
相关产品推荐

