% paste(collapse = " ") %>% -6ren">
gpt4 book ai didi

r - 如何在R的全文中提取字符串模式之间的唯一字符串?

转载 作者:行者123 更新时间:2023-12-04 10:12:42 24 4
gpt4 key购买 nike

我希望从以下文本中提取在国会面前作证的人的姓名和职业:

text <- c(("FULL COMMITTEE HEARINGS\\",\\"2017\\",\n\\"2017年4月6日—''2017年报税季:国内税收\\",\",\"\\"\n服务运营和纳税人体验。''这次听证会\\",\\"审查了\n与 2017 年报税季相关的问题,包括\\",\\"IRS 绩效,\n客户服务挑战,和信息\\",\\"技术。证词是从尊敬的约翰\\",\\"科斯金恩议员那里听到的,国税局局长\n华盛顿服务局,\\",\",\"\\"DC .\\",\\"2017 年 5 月 25 日—''2018 财年预算\n该部门的提案-\\",\\"财政部和税收改革。'' 听证会\n涵盖了\n,\\"总统的 2018 年预算案,并谈到了财政部和税收改革部门的运作。财政部,\\",\",\"\\"美国\n财政部,华盛顿特区。\\",\\"2017 年 7 月 18 日—''全面\n税收改革:前景和查尔-\\",\\"len ges.'' 听证会涵盖了\n围绕潜在税收重新\"、\"形式计划的问题,包括个人、企业\n和国际支持\"、\"提案。听取了尊敬的\n乔纳森·塔利斯 (Jonathan Talis)-\\",\",\"\\"人的证词,前税务政策助理部长 2000–\n2001,\\",\\"美国财政部,华盛顿,直流;\\",\n\\"尊敬的帕梅拉 F.奥尔森,前税务助理部长\\",\\"政策\n2002-2004,美国财政部,\\",\\"华盛顿,直流;\n尊敬的埃里克·所罗门,前助理\"、\"、\"\"税收政策秘书\n2006-2009,美国国务院\",\"财政部,华盛顿特区;和\n尊敬的 Mark J.\\",\\"Mazur, 前税务政策助理部长\n2012-2017,\\",\\"美国财政部,华盛顿特区。\\",\n\\"(5)\\",\\"VerDate Sep 11 2014 14:16 Mar 28, 2019 Jkt 000000 PO 00000 Frm 00013\nFmt 6601 Sfmt 6601 R:\\\\DOCS0\\\\1015ACT. TIM\\"\",\")\")"
)

全文可在此处获得:https://www.congress.gov/116/crpt/srpt19/CRPT-116srpt19.pdf

似乎这些名字介于“见证被听到”和下一个“.”之间。那么,如何提取这两种模式之间的名称呢?文本要长得多(50 页文档),但我想如果我能做一个,我会为文本的其余部分做。

我知道我不能使用 NLP 进行姓名提取,因为例如它们是没有作证的人的姓名。

最佳答案

由于文本中有许多缩写,NLP 可能是不可避免的。试试这个工作流程:

  • 按句子标记
  • 删除没有“见证”的句子
  • 从剩余句子中提取人 + 职业

  • 有几个带有句子标记器的包,但是 openNLP 在处理带有缩写的句子时,通常对我来说效果最好。下面的代码应该让你接近你的目标:

    library(tidyverse)
    library(pdftools)
    library(openNLP)

    # Get the data
    testimony_url <- "https://www.congress.gov/116/crpt/srpt19/CRPT-116srpt19.pdf"
    download.file(testimony_url, "testimony.pdf")
    text_raw <- pdf_text("testimony.pdf")

    # Clean the character vector and smoosh into one long string.
    text_string <- str_squish(text_raw) %>%
    str_replace_all("- ", "") %>%
    paste(collapse = " ") %>%
    NLP::as.String()

    # Annotate and extract the sentences.
    annotations <- NLP::annotate(text_string, Maxent_Sent_Token_Annotator())
    sentences <- text_string[annotations]

    # Some sentences starting with "Testimony" list multiple persons. We need to
    # split these and clean up a little.
    name_title_vec <- str_subset(sentences, "Testimony was") %>%
    str_split(";") %>%
    unlist %>%
    str_trim %>%
    str_remove("^(Testimony .*? from|and) ") %>%
    str_subset("^\\(\\d\\)", negate = T)

    # Put in data frame and separate name from profession/title.
    testimony_tibb <- tibble(name_title_vec) %>%
    separate(name_title_vec, c("name", "title"), sep = ", ", extra = "merge")

    您应该最终得到以下数据框。可能需要进行一些额外的清洁:
    # A tibble: 95 x 2
    name title
    <chr> <chr>
    1 the Honorable John Koskin… Commissioner, Internal Revenue Service, Washington, DC.
    2 the Honorable Steven Mnuc… Secretary of the Treasury, United States Department of the Treasury…
    3 the Honorable Jonathan Ta… former Assistant Secretary for Tax Policy 2000–2001, United States …
    4 the Honorable Pamela F. O… former Assistant Secretary for Tax Policy 2002–2004, United States …
    5 the Honorable Eric Solomon former Assistant Secretary for Tax Policy 2006–2009, United States …
    6 the Honorable Mark J. Maz… "former Assistant Secretary for Tax Policy 2012–2017, United States…
    7 Mr. Daniel Garcia-Diaz Director, Financial Markets and Community Investment, United States…
    8 Mr. Grant S. Whitaker president, National Council of State Housing Agencies, Washington, …
    9 the Honorable Katherine M… Ph.D., professor of public policy and planning, and faculty directo…
    10 Mr. Kirk McClure Ph.D., professor, Urban Planning Program, School of Public Policy a…
    # … with 85 more rows

    关于r - 如何在R的全文中提取字符串模式之间的唯一字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59851930/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com