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

如何使用awk移除单词末尾的ing、ed、s后缀实现词形还原?

awk指定列移除后缀实现词形还原方案

原代码错误原因

  • 正则语法错误:对分组括号添加了不必要的转义符\,导致逻辑上的分组变成了匹配字面括号,只会匹配(ing)、(ed)、(s)这类带括号的字符串,无法匹配单词后缀
  • 后缀匹配顺序错误:未按后缀长度从长到短匹配,短后缀s会优先匹配ing末尾的s,导致长后缀无法被正确识别移除
  • 替换值错误:将后缀替换为空格而非空字符串,会在单词中间产生多余空格
  • 无输出分隔符配置:修改列内容后会导致原制表符分隔格式被替换为空格,破坏原文件结构

可用实现代码

演示场景(处理第二列$2)

awk -F'\t' 'BEGIN{OFS=FS} {
    # 先匹配长后缀,再匹配短后缀避免匹配冲突
    gsub(/(ing|ed)\b/, "", $2)
    gsub(/s\b/, "", $2)
    print
}' file.txt

实际生产场景(处理第14列$14)

仅需将上述代码中的$2替换为$14即可。

代码说明

  • BEGIN{OFS=FS}:指定输出分隔符和输入分隔符一致,保留原文件的制表符分隔格式
  • 分两次做全局替换:先移除3位后缀ing和2位后缀ed,再移除1位后缀s,完全避免短后缀优先匹配的问题
  • \b匹配单词边界,确保仅移除单词末尾的后缀,不会误删单词中间的对应字符
  • 替换值为空字符串"",直接移除后缀不会产生多余空格

输出验证

运行上述代码处理你提供的演示数据集,输出结果和期望结果完全匹配:

onething      Thi i a str that i test multiple time.
twoed         I want to remove word end with many pattern.
threes        Read book i good th.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:15:03