Python字符串列表内单词批量替换为指定编号的问题咨询
批量文本转编号序列优化方案
原代码的问题在于遍历方向错误:你是遍历字典的键值对去匹配单条文本,所以只能处理指定下标的文本,也没法得到完整的顺序序列。优化后改为先遍历每条文本,再对文本内的单词按顺序匹配字典,就能得到完整的有序编号序列,以下是可直接运行的完整代码:
from nltk import word_tokenize from pandas import DataFrame # 待处理文本列表 ft = [ 'Consectetur quisquam aliquam quiquia adipisci ut labore ut sit eius etincidunt velit ipsum amet velit amet modi non quiquia quisquam adipisci dolor quiquia etincidunt quisquam dolore adipisci est quiquia quaerat neque consectetur sed non numquam porro aliquam sed voluptatem numquam consectetur magnam modi sit eius adipisci quisquam sed ut dolorem quisquam sit velit quisquam consectetur consectetur porro dolorem quiquia non dolore modi amet tempora etincidunt ut est sit quaerat dolorem consectetur etincidunt tempora velit voluptatem dolorem voluptatem sed modi ipsum labore adipisci tempora ipsum modi est non etincidunt porro sit etincidunt quaerat quisquam magnam quisquam aliquam modi aliquam aliquam est adipisci amet ipsum quaerat adipisci consectetur velit dolor quisquam non adipisci ipsum labore adipisci quisquam quaerat magnam eius voluptatem ut velit velit quaerat adipisci est non velit est labore labore eius magnam eius', 'Magnam aliquam tempora dolorem quaerat non quiquia numquam eius labore tempora ut neque dolor modi eius aliquam numquam quisquam ut sit est eius quisquam porro sed adipisci dolore porro amet eius sit adipisci sit dolore magnam neque sed modi tempora aliquam etincidunt quisquam dolor ipsum ut amet etincidunt consectetur non ipsum quisquam sed ipsum sit tempora consectetur sit consectetur velit etincidunt dolore labore adipisci ut dolor adipisci magnam sed quiquia etincidunt velit quisquam consectetur dolore ipsum modi sed est quiquia eius quisquam magnam voluptatem ut sit ut etincidunt dolore porro modi porro aliquam eius tempora neque porro eius dolorem etincidunt porro dolore quisquam quiquia quisquam quiquia sed quisquam consectetur ipsum ut tempora numquam adipisci' ] # 生成唯一单词-编号映射字典 all_text = ''.join(ft).lower() all_tokens = word_tokenize(all_text) unique_tokens = set(all_tokens) # 修正原代码的变量名拼写错误(原代码写为unik_liste) unique_list = list(unique_tokens) # 自动按唯一单词数量生成编号,不需要手动写固定长度的range uni_dict = dict(zip(unique_list, range(1, len(unique_list)+1))) # 批量替换核心逻辑 new_number_text = [] for text in ft: # 单条文本转小写+分词 tokens = word_tokenize(text.lower()) # 按映射字典替换为编号,顺序和原文本单词顺序完全一致 num_sequence = [uni_dict[token] for token in tokens] new_number_text.append(num_sequence)
适配不同输出需求的调整点
- 如果需要输出空格分隔的编号字符串而不是列表,可把
num_sequence的生成逻辑改为' '.join(str(uni_dict[token]) for token in tokens) - 如果要过滤不在字典里的生僻词,可把列表生成式改为
[uni_dict[token] for token in tokens if token in uni_dict]
内容的提问来源于stack exchange,提问作者EB_10
相关产品推荐
相关产品推荐

