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

如何移除元组中紧跟PERSON类型元素的特定's'元素?

解决方案:精准移除紧跟PERSON的"'s"

我来给你解决这个问题——你需要精准移除紧跟在PERSON类型元素之后的那个"'s",而不是所有的's',对吧?这里有个简单的实现思路:我们遍历原标注列表时,跟踪前一个元素的标注类型,以此判断是否要跳过当前的"'s"。

实现代码

text = [('Michael', 'PERSON'), ('Jordan', 'PERSON'), ("'s", 'O'), ('legacy', 'O'), ('in', 'O'), ('the', 'O'), ('90', 'O'), ("'s", 'O'), ('shows', 'O'), ('that', 'O'), ('he', 'O'), ('was', 'O'), ('the', 'O'), ('biggest', 'O'), ('player', 'O'), ('ever', 'O'), ('in', 'O'), ('the', 'O'), ('NBA', 'ORGANIZATION'), ('.', 'O')]

filtered_tokens = []
previous_tag = None

for token, tag in text:
    # 跳过所有PERSON类型的元素
    if tag == 'PERSON':
        previous_tag = tag
        continue
    # 仅跳过紧跟PERSON之后的"'s"
    if token == "'s" and previous_tag == 'PERSON':
        previous_tag = tag
        continue
    # 保留其他所有元素
    filtered_tokens.append(token)
    previous_tag = tag

# 拼接成最终句子
sentence = " ".join(filtered_tokens)
print(sentence)

代码逻辑说明

  1. 用previous_tag变量记录上一个元素的标注类型,初始值为None;
  2. 遍历每个标注元组时:
    • 如果当前元素是PERSON类型,直接跳过,同时更新previous_tag为PERSON;
    • 如果当前元素是's'且上一个元素是PERSON类型,也跳过,更新previous_tag;
    • 其他所有情况都将token加入过滤后的列表,并更新previous_tag;
  3. 最后用join拼接成句子,得到的结果是:
    legacy in the 90 's shows that he was the biggest player ever in the NBA .
    

这样就完美解决了你的需求——只移除了紧跟PERSON的那个s,保留了90's里的s。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:17:32