Python使用NLTK对DataFrame分词时如何保留小数同时去除多余标点
解决方案
方案1:自定义NLTK正则分词器(推荐)
直接在分词阶段实现保留小数、过滤独立标点的需求,无需额外后处理,性能更优,可直接适配DataFrame场景使用:
import nltk from nltk.tokenize import RegexpTokenizer # 定义分词规则:优先匹配小数、整数、英文单词,自动跳过单独标点 custom_rule = r'\d+\.\d+|[A-Za-z]+|\d+' tokenizer = RegexpTokenizer(custom_rule) # 直接对DataFrame指定列执行分词 Data_preprocessing['clean_custom_content_tokenize'] = Data_preprocessing['tweet_without_stopwords'].apply(tokenizer.tokenize)
如果有其他需要保留的特殊格式(比如带连字符的复合词、带特定符号的专有名词),只需要调整custom_rule的正则匹配规则即可。
方案2:分词后列表过滤
如果不想改动原有分词逻辑,可以在nltk默认分词后追加过滤步骤,仅保留符合规则的分词单元:
import re import nltk def clean_token_list(tokens): # 匹配规则:仅保留小数、整数、英文单词,过滤独立标点 valid_token = re.compile(r'^(\d+\.\d+|[A-Za-z]+|\d+)$') return [token for token in tokens if valid_token.match(token)] # 原有分词逻辑不变,追加过滤步骤 Data_preprocessing['clean_custom_content_tokenize'] = Data_preprocessing['tweet_without_stopwords']\ .apply(nltk.word_tokenize)\ .apply(clean_token_list)
两种方法都可以实现保留小数的同时过滤多余独立标点的需求,无需额外转换数据格式,可直接作用于DataFrame列。
内容的提问来源于stack exchange,提问作者kostya ivanov
相关产品推荐
相关产品推荐

