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

在R语言中从多格式文本提取NFL达阵球员姓名的方法求助

在R语言中从格式多样的play_desc列提取NFL达阵球员姓名

问题场景

需要从格式不一的NFL比赛描述文本(play_desc列)中提取达阵得分球员姓名,示例文本及目标结果如下:

play_1 <- "Kareem Hunt Pass From Jacoby Brissett for 1 Yd C.York extra point is GOOD, Center-C.Hughlett, Holder-C.Bojorquez."
play_2 <- "(10:03) J.Allen pass short right to G.Davis for 26 yards, TOUCHDOWN.T.Bass extra point is GOOD, Center-R.Ferguson, Holder-S.Martin."
play_3 <- "Michael Thomas 9 Yd pass from Jameis Winston (Two-Point Run Conversion Failed)"
play_4 <- "(12:58) K.Murray pass short left to M.Brown for 6 yards, TOUCHDOWN. TWO-POINT CONVERSION ATTEMPT. K.Murray pass to Z.Ertz is complete. ATTEMPT SUCCEEDS."
play_5 <- "DJ Chark Pass From Jared Goff for 22 Yds A.Seibert extra point is GOOD, Center-S.Daly, Holder-J.Fox."
play_6 <- "(3:24) P.Mahomes pass short middle to C.Edwards-Helaire for 3 yards, TOUCHDOWN.J.Reid extra point is GOOD, Center-J.Winchester, Holder-T.Townsend."
play_7 <- "Isaiah McKenzie Pass From Josh Allen for 7 Yds T.Bass extra point is GOOD, Center-R.Ferguson, Holder-S.Martin."

对应目标球员:Kareem Hunt、G.Davis、Michael Thomas、M.Brown、DJ Chark、C.Edwards-Helaire、Isaiah McKenzie

解决方案

观察文本规律,达阵球员的位置分为两种典型句式,可通过正则表达式匹配两种场景来提取,结合stringr包实现:

核心代码

library(dplyr)
library(stringr)

# 构造示例数据框
plays_df <- tibble(
  play_desc = c(play_1, play_2, play_3, play_4, play_5, play_6, play_7),
  play_type = rep("Passing Touchdown", 7)
)

# 提取达阵球员
plays_df <- plays_df %>%
  mutate(td_scorer = case_when(
    play_type == "Passing Touchdown" ~ str_trim(str_extract(play_desc, 
      "^[^(]*?(?=( Pass| \\d+ Yd))|(?<=to )[^ ]+?(?= for |, TOUCHDOWN)"
    ))
  ))

正则逻辑解释

正则分为两个备选分支,分别对应两种句式:

  1. ^[^(]*?(?=( Pass| \\d+ Yd)):匹配文本开头到 Pass或 数字 Yd之前的内容,对应「达阵球员在文本开头」的场景(如play_1、3、5、7)
  2. (?<=to )[^ ]+?(?= for |, TOUCHDOWN):匹配to 之后、for或, TOUCHDOWN之前的内容,对应「达阵球员在传球者之后的to引导语后」的场景(如play_2、4、6)

验证结果

运行代码后,td_scorer列会得到预期的达阵球员姓名:

# A tibble: 7 × 3
  play_desc                                                                 play_type          td_scorer        
  <chr>                                                                      <chr>              <chr>            
1 Kareem Hunt Pass From Jacoby Brissett for 1 Yd C.York extra point is GOOD… Passing Touchdown  Kareem Hunt      
2 (10:03) J.Allen pass short right to G.Davis for 26 yards, TOUCHDOWN.T.Bas… Passing Touchdown  G.Davis          
3 Michael Thomas 9 Yd pass from Jameis Winston (Two-Point Run Conversion Fa… Passing Touchdown  Michael Thomas   
4 (12:58) K.Murray pass short left to M.Brown for 6 yards, TOUCHDOWN. TWO-P… Passing Touchdown  M.Brown          
5 DJ Chark Pass From Jared Goff for 22 Yds A.Seibert extra point is GOOD, C… Passing Touchdown  DJ Chark         
6 (3:24) P.Mahomes pass short middle to C.Edwards-Helaire for 3 yards, TOUC… Passing Touchdown  C.Edwards-Helaire
7 Isaiah McKenzie Pass From Josh Allen for 7 Yds T.Bass extra point is GOOD… Passing Touchdown  Isaiah McKenzie  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:05:24