如何从DataFrame分词列提取单词dog前后各2个词并生成新列
实现方案
你可以通过自定义提取函数搭配pandas的apply方法完成需求,完整代码如下:
def extract_dog_context(tokens): # 无匹配词时的返回逻辑可按需调整 if "dog" not in tokens: return [] # 获取dog首次出现的索引位置 dog_idx = tokens.index("dog") # 计算切片起止位置,左边界取0避免负数索引越界 start_idx = max(0, dog_idx - 2) # 右边界加3是因为Python列表切片左闭右开,刚好覆盖dog后2个元素 end_idx = dog_idx + 3 return tokens[start_idx:end_idx] # 生成新列 df["tokenized_part2"] = df["tokenized"].apply(extract_dog_context)
注意事项
- 如果单条分词列表中存在多个
dog,上述代码默认只提取第一个dog的上下文,如需提取所有匹配项的上下文,可修改函数遍历所有匹配索引拼接结果即可 - 边界场景自动兼容:如果
dog出现在列表前两位,前面不足2个词时会从列表开头开始提取;如果dog出现在列表末尾后两位,后面不足2个词时会自动截取到列表结尾,不会报错
内容的提问来源于stack exchange,提问作者rebar
相关产品推荐
相关产品推荐

