【问题标题】:How to extract the address details from the given text?如何从给定文本中提取地址详细信息?
【发布时间】:2018-10-08 03:36:41
【问题描述】:

如何从下面的文本中提取不带 \r\n 的地址 (39/4B.......700025)?

Text<-"From :\r\nName         : NAMITA ROY\r\nAddress       : 39/4B\r\n                 GOPALNAGAR ROAD\r\n                 ALIPORE\r\n                 KOLKATA,WEST BENGAL\r\n                 700027\r\nEntity \r\nName         : SWARNABARSA PROJECTS PRIVATE LIMITED\r\nAddress       : 90A\r\n                 RAJ SEKHAR BOSE SARANI, FLAT NO.1D, 1ST FLOOR\r\n                 KOLKATA,WEST BENGAL\r\n                 INDIA - 700025\r\nFull Particulars of Remittance\r\nService Type: eFiling\r\n"

【问题讨论】:

  • 你是如何尝试提取它的,你卡在哪里了?

标签: r pattern-matching pattern-recognition


【解决方案1】:

试试这个方法:

Text<-"From :\r\nName         : NAMITA ROY\r\nAddress       : 39/4B\r\n                 GOPALNAGAR ROAD\r\n                 ALIPORE\r\n                 KOLKATA,WEST BENGAL\r\n                 700027\r\nEntity \r\nName         : SWARNABARSA PROJECTS PRIVATE LIMITED\r\nAddress       : 90A\r\n                 RAJ SEKHAR BOSE SARANI, FLAT NO.1D, 1ST FLOOR\r\n                 KOLKATA,WEST BENGAL\r\n                 INDIA - 700025\r\nFull Particulars of Remittance\r\nService Type: eFiling\r\n"

#Remove redundant spaces
library(stringr)
Text<-gsub("\\s+", " ", str_trim(Text))

address_dirty<-unlist(strsplit(Text,split = "Address : "))[2]
posiz<-regexpr("[0-9]{6,}",address_dirty) #Find ZIP Code posizion
address<-substr(address_dirty,1,posiz[1]+5)
address
[1] "39/4B GOPALNAGAR ROAD ALIPORE KOLKATA,WEST BENGAL 700027"

代码提取地址beetwen字符串Address和邮政编码。

【讨论】:

  • 已更新为您提供的新输入格式。
  • 谢谢你的代码,但是对于这个文件,你一直在考虑“实体”之前可能没有“实体”字样的其他文件,对吧......所以我认为我们应该可能会尽量考虑到邮政编码。
【解决方案2】:

我的代码取自“地址:”之后的所有内容,包括 6 位数字 (ZIP)

 strsplit(Text,"Name(\\s+)?:")[[1]][-1] %>% list %>% lapply(function(x)gsub(x=x,pattern="[\\s\\S]*?Address\\s+:([\\s\\S]*?\\d{6})[\\s\\S]*?$",replacement="\\1",perl=T)) %>%
    lapply(function(x)gsub(x=x,pattern="\\r|\\n",replacement="",perl=T)) %>% lapply(function(x)trimws(gsub(x=x,pattern="\\s+",replacement=" ",perl=T)))

结果:

[[1]]
[1] "39/4B GOPALNAGAR ROAD ALIPORE KOLKATA,WEST BENGAL 700027"                            
[2] "90A RAJ SEKHAR BOSE SARANI, FLAT NO.1D, 1ST FLOOR KOLKATA,WEST BENGAL INDIA - 700025"

【讨论】:

    【解决方案3】:

    试试

    trimws(unlist(strsplit(unlist(strsplit(gsub("\r\n|\\s+", " ", Text), ":"))[4], "Entity Name"))[1])
    
    # [1] "39/4B GOPALNAGAR ROAD ALIPORE KOLKATA,WEST BENGAL 700027"
    

    【讨论】:

    • 谢谢你的代码,但是对于这个文件,你一直在考虑“实体”之前可能没有“实体”字样的其他文件,对吧......所以我认为我们应该可能会尽量考虑到邮政编码。
    猜你喜欢
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多