You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tidytext::unnest_tokens生成ngram时如何保留/等特殊字符

最优解决方案

问题根源是tidytext::unnest_tokens()调用底层tokenizers::tokenize_ngrams()时,默认开启了strip_non_alnum = TRUE参数,会自动删除所有非字母、数字的字符,因此3/8这类带斜杠的尺寸会被拆成3和8两个独立token。
直接给底层函数传递strip_non_alnum = FALSE即可解决问题,不需要额外做字符串替换:

library(tidyverse)
library(tidytext)

tibble(text="My example is 3/8 pipe and 5/8 wrench") %>%
  unnest_tokens(
    output = bigrams,
    input = text,
    token = "ngrams",
    n = 2,
    # 不删除非字母数字字符,保留斜杠
    strip_non_alnum = FALSE
  )

运行后输出和你临时方案的结果完全一致:

# A tibble: 7 × 1
  bigrams   
  <chr>     
1 my example
2 example is
3 is 3/8    
4 3/8 pipe  
5 pipe and  
6 and 5/8   
7 5/8 wrench

方案优势

相比临时替换字符串的方案,这个方法:

  • 代码更简洁,不需要两次正则替换操作
  • 不会出现替换标记和原文内容冲突的问题(比如原文恰好包含forwardslash字符串时,临时方案会出错)
  • 完全利用官方接口的参数实现需求,稳定性更高

内容的提问来源于stack exchange,提问作者Nickerbocker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:45:02