如何重新定义nltk.RegexpTokenizer,同时保留单词与指定短语作为单独分词?
用NLTK RegexpTokenizer同时识别单词与特定短语
可以实现这个需求,核心思路是让正则表达式优先匹配目标短语,再匹配普通单词——利用正则的匹配优先级,把短语放在正则模式的最前面,就能确保短语被优先捕获为单个分词,剩下的内容再按普通单词拆分。
实现代码示例
from nltk.tokenize import RegexpTokenizer import re # 定义正则模式:先匹配"big data"短语,再匹配单个单词 pattern = r'big data|\w+' # 初始化分词器,若需要忽略短语的大小写,添加flags参数 # tokenizer = RegexpTokenizer(pattern, flags=re.IGNORECASE) tokenizer = RegexpTokenizer(pattern) # 测试文本 test_text = "Big data is trending, and big data projects are everywhere." tokens = tokenizer.tokenize(test_text) print(tokens)
结果说明
- 未加
flags=re.IGNORECASE时,输出为:['Big', 'data', 'is', 'trending', 'and', 'big data', 'projects', 'are', 'everywhere']
只有小写的"big data"会被识别为单个分词,大写开头的"Big data"会拆成两个单词。 - 添加
flags=re.IGNORECASE后,输出为:['big data', 'is', 'trending', 'and', 'big data', 'projects', 'are', 'everywhere']
无论大小写,"big data"都会被识别为单个分词。
扩展:多个特定短语的情况
如果需要同时识别多个短语,只需在正则模式中继续添加,用|分隔,保持短语在前、普通单词在后的顺序即可:
pattern = r'big data|machine learning|\w+' tokenizer = RegexpTokenizer(pattern, flags=re.IGNORECASE)
内容的提问来源于stack exchange,提问作者striatum
相关产品推荐
相关产品推荐

