You need to enable JavaScript to run this app. 如何实现带斜杠标签的文本词条去重及同词根标签合并处理
优惠活动
大模型
产品
解决方案
定价
更多

如何实现带斜杠标签的文本词条去重及同词根标签合并处理

带斜杠标签的词条特殊去重处理

核心规则

  • 存储词条的文本文件存在重复内容,常规sort -u仅能完成字面意义的全局去重,无法满足带斜杠标签的词条特殊处理逻辑
  • 基础处理逻辑:若同一词根下同时存在「无斜杠的纯短词条」和「带斜杠标签的长词条」,需删除对应的无斜杠短词条,仅保留带标签的长词条
  • 多标签场景要求:同一词根对应多个不同标签的词条时,需要完整保留所有不同标签的长词条,不能只留存第一个遇到的带标签条目
  • 延伸可选需求:支持将同一词根下的所有标签合并,输出为词根/合并后的标签串格式的单一条目

效果演示

单标签词根场景

原始输入文件内容:

test/e
this/x
word/p
and
some
more/q
test
this
and
some

执行常规sort -u t1.txt的输出结果:

and
more/q
some
test
test/e
this
this/x
word/p

该结果不符合预期:无标签的test、this均存在对应带斜杠标签的版本,需要被删除。正确输出应为:

and
more/q
some
test/e
this/x
word/p

多标签词根场景

更新后的输入文件内容:

test/e
this/x
word/p
and
some
more/q
test
this
and
some
more/n
word/n

之前尝试的错误命令awk -F/ '!seen[$1]++{rows[$0]} END {for (i in rows) print i}'会因为遇到第一个同词根带标签词条就标记已处理,漏录后续同词根的其他标签条目,输出缺失more/n、word/n,不符合要求。
正确预期输出需包含所有带标签的长词条:

and
more/q
more/n
some
test/e
this/x
word/p
word/n

实现命令

基础需求实现:删除无标签短词条、完整保留所有多标签长词条

awk -F/ '
{
  root = $1
  if (NF > 1) {
    # 标记当前词根存在带标签版本,将词条存入待输出数组
    has_tag[root] = 1
    tagged[$0] = 1
  } else {
    # 暂存所有无斜杠的纯短词条
    plain[$0] = 1
  }
}
END {
  # 输出全部带标签的长词条
  for (entry in tagged) print entry
  # 输出没有对应带标签版本的纯短词条
  for (entry in plain) if (!has_tag[entry]) print entry
}' t1.txt | sort

该命令不会遗漏同词根的多标签条目,最终输出经过排序,和常规sort -u的输出风格保持一致。

延伸需求实现:同词根合并所有标签为单一条目

awk -F/ '
{
  root = $1
  if (NF > 1) {
    tag = $2
    # 收集当前词根下的所有非重复标签,避免重复拼接
    if (!(tag in tag_visit[root])) {
      tag_visit[root][tag] = 1
      tags_of[root] = tags_of[root] tag
      has_tag[root] = 1
    }
  } else {
    plain[root] = 1
  }
}
END {
  # 输出合并标签后的长词条
  for (root in tags_of) print root "/" tags_of[root]
  # 输出无对应标签的纯短词条
  for (root in plain) if (!has_tag[root]) print root
}' t1.txt | sort

该命令会将同一词根下的所有标签去重后拼接,输出如word/np、more/nq格式的合并条目,无需逐行保留拆分的带标签词条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 06:36:10