Pandas中nltk.word_tokenize仅返回前101个token的问题排查与修复
问题诱因
该截断属于Pandas显示层的规则限制,和NLTK分词逻辑无关,不存在分词只处理前101个token的问题。
你之前设置的display.max_colwidth = None仅对单元格内的字符串类型内容生效,而nltk.word_tokenize()返回的是Python列表对象,这类序列类型的单元格展示受单独的配置项约束:Pandas默认配置下,单个单元格内的序列元素最多展示100个,超出部分会自动以...省略,和实际存储的数据完整性无关。
验证方式
你可以通过两行代码快速确认分词结果是完整的:
- 取任意行的分词结果打印长度:
print(len(LC_HD_df['word'].iloc[0])),返回的数值会远大于101 - 直接打印对应行的分词结果:
print(LC_HD_df['word'].iloc[0]),可以看到完整的全量分词内容,没有截断
修复方案
- 如果只是要做后续POS tagging等计算任务,不需要修改任何配置:显示截断不会改动内存中存储的实际分词结果,所有分词数据都是完整可用的。
- 如果需要在DataFrame预览时看到完整的分词列表,在原有配置基础上新增序列元素展示数的配置即可,完整代码如下:
import pandas as pd import nltk # 原有配置:字符串列展示宽度无限制 pd.set_option('display.max_colwidth', None) # 新增配置:单元格内序列类元素展示数量无限制 pd.set_option('display.max_seq_items', None) LC_HD_df['word'] = LC_HD_df['sent'].apply(lambda x: nltk.tokenize.word_tokenize(str(x)))
内容的提问来源于stack exchange,提问作者ddormer
相关产品推荐
相关产品推荐

