【问题标题】:Extract specific pattern from data on R从 R 上的数据中提取特定模式
【发布时间】:2015-12-12 07:33:19
【问题描述】:

我有一个“.txt”文件,其中包含大量法律文本,但我只想提取日期以进行进一步分析和绘制图形。这是一个例子(抱歉是葡萄牙语):

“AR - 4024-03.2010.5.00.0000(2)”“ACORDAM os Ministros da Egrégia Subseção II Especializada em Dissídios Individuais do Tribunal Superior do Trabalho, por unanimidade, não conhecer do recurso ordinário, por incabível。 巴西利亚,2011 年 2 月 24 日。菲尔马多 assinatura digital (MP 2.200-2/2001) Alberto Luiz Bresciani de Fontan 佩雷拉部长关系者佛罗里达州。加工编号 TST-AR-4024-03.2010.5.00.0000 Firmado por assinatura 数字 em 26/05/2011 pelo sistema AssineJus da Justiça do Trabalho,符合 MP 2.200-2/2001, que instituiu a Infra-Estrutura de Chaves Públicas Brasileira。”

那个文件有很多这样的东西,但我只想提取突出显示的部分并将它们放在一个单独的向量中。我一直在尝试匹配,grep 没有任何效果。也许是因为我是 R 新手。

【问题讨论】:

  • 当您说“grep 没有任何工作”时...您尝试过什么?另外,你是如何将这个文件读入 R 的?
  • 您需要仔细考虑日期在字符串中的位置、它们的各种模式和排列,并根据您的应用程序定制您的正则表达式。如果您需要有关编写某些代码的建议,请提供更多日期格式示例。

标签: regex r text-mining


【解决方案1】:

此模式将匹配您突出显示的表单的日期:

"\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4}"

有关特殊字符和量词的详细信息,请参阅?regex。您可以替换匹配的项目:

your_text <-  c("AR - 4024-03.2010.5.00.0000", "ACORDAM os Ministros da Egrégia Subseção II Especializada em Dissídios Individuais do Tribunal Superior do Trabalho, por unanimidade, não conhecer do recurso ordinário, por incabível. Brasília, 24 de maio de 2011. Firmado por assinatura digital (MP 2.200-2/2001) Alberto Luiz Bresciani de Fontan Pereira Ministro Relator fls. PROCESSO Nº TST-AR-4024-03.2010.5.00.0000 Firmado por assinatura digital em 26/05/2011 pelo sistema AssineJus da Justiça do Trabalho, conforme MP 2.200-2/2001, que instituiu a Infra-Estrutura de Chaves Públicas Brasileira.")

sub( "(.+ )(\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4})(.+)", "\\2", your_text[grepl("\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4}", your_text )
[1] "AR - 4024-03.2010.5.00.0000" "24 de maio de 2011" 

要删除不包含日期的项目,可以使用grepl进行预选:

> sub( "(.+ )(\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4})(.+)", "\\2", your_text[grepl("\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4}", your_text )])
[1] "24 de maio de 2011"

如果您需要使用这些模式来掌握使用捕获类的窍门,可以使用漂亮的正则表达式测试网页。

【讨论】:

  • 效果很好。我发现主要问题在于我的档案阅读。关于正则表达式它可以更简单,但你给了我一个亮点。 library(stringr) dates = str_extract_all(text, "(\\d+ de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro) de \\d+)")
  • 您可能将月份作为向量粘贴到 sep="|"在您的语言环境中作为month.abbmonth.name-objects。我相信该对象会“国际化”。如果它们需要“大写”或“小写”,则有 tolowertoupper 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2016-05-30
  • 2022-12-18
  • 2014-08-05
  • 2021-08-15
相关资源
最近更新 更多