12
返回列表 发新帖
楼主: addtool
收起左侧

[软件] 如何从有规律的文本中提取联系人,电话等至Excel表中?

[复制链接]
随便注册
发表于 2014-2-23 20:33:19 | 显示全部楼层
为什么不能全自动,因为有“地址:”“旁邮编”“电话:”“传真:”“经营范围:”“Email”“E-mai1”“Email”“http;”“"http://”“ttp://”“//www”“-mail”,PDF导出的还会有硬换行如地址、经营范围,还好不多;本想用字体大小来定位公司名称,结果还有几个7pt的。就是说,每一个可以用来定位的,都有例外,怎么弄?

勉强处理成了这样


过程:
用ePDF2Word将PDF转成doc--WPS打开后另存为htm--htm用Akelpad打开
1.<span替换为\n<span
2.>\d+?</span>替换为></span>
3.>&#9;</span>替换为></span>
4.脚本中的排序筛选--筛选行
包括行:font-size:[678].0000pt
排除行:
第三届深圳国际智能交通与卫星导航位置服务展览会
让视界更精彩
5.<.+>替换为空
6.\n+替换为\n
以上步骤全部勾上正则选框

最后用TextForever正则处理,规则见附件
导入后还要人工检查,以最后一列的“经营范围”为校验,哪里不对就对比前后行修改。至于省市、分类懒得弄了,提取行时一并去除了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
addtool
 楼主| 发表于 2014-2-24 12:01:36 | 显示全部楼层
随便注册 发表于 2014-2-23 20:33
为什么不能全自动,因为有“地址:”“旁邮编”“电话:”“传真:”“经营范围:”“Email”“E-mai1”“Email ...

先感谢“随便注册”大仙。 我要好好学习。
thelord
发表于 2014-2-24 22:58:42 | 显示全部楼层
本帖最后由 thelord 于 2014-2-24 23:00 编辑

用 awk 处理了下,主要把 7 行补足到 8 行,其次是多余换行的处理。如下是 awk 脚本:

  1. BEGIN {
  2.         a=0;
  3. }

  4. # 定位公司名
  5. !/[:0-9.]/ {
  6.         a=NR;  # 公司名所在的行
  7. }

  8. # 打印公司信息;根据行偏移处理异常
  9. {       
  10.         switch (NR-a)        {
  11.                  case 2:
  12.                         if (!/邮编/) { printf "++"; a++; }  # 若第2行不是邮编,说明地址有换行,添加 ++ 指示
  13.                          print;
  14.                          break;
  15.                  case 3:
  16.                         if (NF>2)
  17.                                 print "Phone: "$2"|"$3;  # 若电话有两个,则用 | 合并为一个
  18.                         else
  19.                                 print;
  20.                         break;
  21.                 case 5:
  22.                         if (!/@/) { print "Email: ##"; a--; }  # 若无 email,则用 ## 补位
  23.                         print;
  24.                         break;
  25.                 case 6:
  26.                         if (!/ww./) { print "Http: ##"; a--; }  # 若无网址,则用 ## 补位
  27.                         print;
  28.                         break;
  29.                  case 8:
  30.                         print "++"$0;  # 若有第8行,说明经营范围有换行,添加 ++ 指示
  31.                         break;
  32.                 default:
  33.                         print;
  34.                         break;
  35.         }
  36. }
复制代码

说明:对于公司名称的定位,若不含标点和数字,则是名称,不知道有没有例外;本想去掉多余的换行(地址与经营范围里的),但不知道是否awk的bug,先不换行打印前面,再换行打印后面,结果后面会把前面内容覆盖掉,用变量保存后拼接打印也不行,只好用++指示,方便替换掉;缺的行可能是email,也可能是网址,不知还有没有其它情况,一律用 ## 补上;经营范围是最后一列,缺少应该不影响导入 excel,故没补

使用:
1. 先替换中文标点为英文标点(冒号和句号),方便统一处理
2. 把脚本保存为awk文件,用 gawk 程序运行之, gawk -f xx.awk 名录.txt >1.txt
3. 删除 1.txt 中多余换行:正则替换 \r\n++ 和 \n++为空
4. 正则替换 \n.*[:|//] 为空格,把行转成列
5. 检查各行的列数,gawk 'NF<=7{print NR, $0}' 1.txt,若<=7列,则打印出来,应该是没有经营范围。
6. 导入 excel
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-11 09:07 , Processed in 0.088606 second(s), 14 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表