Chinaunix

标题: 如何从文档中提取实体和数据 [打印本页]

作者: laoliuya    时间: 2019-03-27 16:00
标题: 如何从文档中提取实体和数据
从图片所示文档中提取类似经费方面的数据,比如 科技活动经费 筹集 1460.6亿元       增加  170.9亿元 增长率 2.5%  这之类的数据



统计公报.zip (20.05 KB, 下载次数: 18)

作者: laoliuya    时间: 2019-03-28 15:06
无人知晓?
作者: laoliuya    时间: 2019-04-01 15:22

作者: laoliuya    时间: 2019-04-09 15:00

作者: cfwyy    时间: 2019-04-22 14:43
本帖最后由 cfwyy 于 2019-04-22 14:46 编辑

光提取数字好说,问题是你没有给出实体精确的定义,怎么去严格认定哪些字,从哪到哪是你想要的实体?

观察样本,我先姑且粗略的认为数值前面可能有汉字,别的数字,字母,()(),
数值大概有两种 一种是***.*(亿,万)元
一种是**.*%
所以我直接用grep匹配,前提是docx文件要转成纯文本。
不知是否能满足你的要求。

  1. $ grep -Po '[A-Z\d\(\)()&\p{Han}]+(\d+(\.\d)?(亿元|亿|万元|元)|\d{1,2}(\.\d{1,2})?%(?!、)|:?(\d{1,2}(\.\d{1,2})?%、){1,2}\d{1,2}(\.\d{1,2})?%和\d{1,2}(\.\d{1,2})?%)' file.txt
复制代码

结果:
  1. 研究与试验发展(R&D)经费支出占国内生产总值(GDP)的比重首次超过0.8%
  2. 1999年全国共筹集科技活动经费1460.6亿元
  3. 比上年增加170.9亿元
  4. 同口径增长12.5%
  5. 按总人口计算的全国人均科技活动经费筹集额116元
  6. 比上年增加12.7元
  7. 1999年国家财政科技拨款额达543.9亿元
  8. 比上年增加105.3亿元
  9. 实际增长26.8%
  10. 科技拨款占国家财政支出的比重为4.1%
  11. 其中中央财政科技拨款占中央财政支出的比重为8.6%
  12. 地方财政科技拨款占地方财政支出的比重为2.1%
  13. 1999年科技活动经费支出总额为1284.9亿元
  14. 比上年增加156.5亿元
  15. 同口径增长13%
  16. 企业支出654.6亿元
  17. 比上年同口径增长16.6%
  18. 研究与开发机构支出496.9亿元
  19. 增长9.4%
  20. 高等学校支出85.1亿元
  21. 增长16.3%
  22. 各执行部门支出占全部科技经费支出的比重分别为50.9%、38.7%和6.6%
  23. ......
复制代码



作者: laoliuya    时间: 2019-04-28 16:02
cfwyy 发表于 2019-04-22 14:43
光提取数字好说,问题是你没有给出实体精确的定义,怎么去严格认定哪些字,从哪到哪是你想要的实体?观察样 ...

这事难就难在这里。谢谢大佬的指点,这个结果虽然不是100%符合要求,但是很有用,我好好学习一下代码!

作者: laoliuya    时间: 2019-04-28 16:34
回复 5# cfwyy

这段正则表达示挺复杂,而且应该不是Python代码,以我的水平比较难理解,求讲解
作者: dahe_1984    时间: 2019-04-28 17:52
laoliuya 发表于 2019-04-28 16:02
这事难就难在这里。谢谢大佬的指点,这个结果虽然不是100%符合要求,但是很有用,我好好学习一下代码!

上面的图片,你到底想抓出什么?抓的规则是什么?

作者: laoliuya    时间: 2019-04-28 18:04
dahe_1984 发表于 2019-04-28 17:52
上面的图片,你到底想抓出什么?抓的规则是什么?


实体和数据一起就行了,
比如  科技活动经费1460.6亿元 增加170.9亿元 增长12.5%

作者: dahe_1984    时间: 2019-04-28 19:00
5楼的哪里不对?
作者: laoliuya    时间: 2019-04-28 19:15
回复 10# dahe_1984

好像没哪不对,只是看不太懂,不是python的吧
作者: dahe_1984    时间: 2019-04-28 19:56
10块钱?不到一个小时,肯定有大神出答案,咋样
作者: laoliuya    时间: 2019-04-28 20:07
回复 12# dahe_1984

好啊!!!
作者: cfwyy    时间: 2019-04-29 08:52
回复 7# laoliuya

就是正则嘛,至于用python,还是其它语言或工具 基本一样。单纯为了提取或匹配我觉得还是grep方便。
正则就一部分一部分看嘛
第一部分:
  1. [A-Z\d\(\)()&\p{Han}]+
复制代码
你没有给出什么是实体的精确定义,看你提供的样本我只能认为实体可能由大写字母,数字,中英括号,&,汉字组成,汉字在perl正则下可以用\p{Han}匹配。
第二部分:
  1. (  \d+(\.\d)?(亿元|亿|万元|元)  |   \d{1,2}(\.\d{1,2})?%(?!、)  |  :?(\d{1,2}(\.\d{1,2})?%、){1,2}\d{1,2}(\.\d{1,2})?%和\d{1,2}(\.\d{1,2})?%   )
复制代码
又可以分为三个分支,对应数值的几种情况
第一分支
  1. \d+(\.\d)?(亿元|亿|万元|元)
复制代码
表示多少钱。

第二分支
  1. \d{1,2}(\.\d{1,2})?%(?!、)
复制代码
表示只有一个百分比%,一个%后面不能是 、号。

第三分支
  1. :?(\d{1,2}(\.\d{1,2})?%、){1,2}\d{1,2}(\.\d{1,2})?%和\d{1,2}(\.\d{1,2})?%
复制代码
表示  3个或4个 百分比的形式。
开头可以有个:或者没有,  *.*%、这个可能重复1到2次,最后是*.*%和*.*%
所有的组后起来,就可以了。
最后这个正则只是为了能简单出结果,还没有过多的考虑优化和性能问题。应该有改进空间。

作者: dahe_1984    时间: 2019-04-29 16:40
#!Python 3.7.0

import docx
import re

def search(datas, pattern):
    for line in datas:
        for tmp in re.split(',|。|;',line.text):
            if re.search(pattern, tmp):
                yield tmp

if __name__ == '__main__':
    doc     = docx.Document('1999.docx')
    for line in search(doc.paragraphs, r'(:?(\d{1,2}(\.\d{1,2})?%、){1,2}\d{1,2}(\.\d{1,2})?%和\d{1,2}(\.\d{1,2})?%)|(\d+(\.\d)?(亿元|亿|万元|元)|(\d{1,2}(\.\d{1,2})?%(?!、)))'):
        print(line, end='')
        print("\n")

大体就是这个意思,中文处理起来太恶心了。

作者: dahe_1984    时间: 2019-04-29 16:41
研究与试验发展(R&D)经费支出占国内生产总值(GDP)的比重首次超过0.8%

    1999年全国共筹集科技活动经费1460.6亿元

比上年增加170.9亿元

同口径增长12.5%

按总人口计算的全国人均科技活动经费筹集额116元

比上年增加12.7元

    1999年国家财政科技拨款额达543.9亿元

比上年增加105.3亿元

实际增长26.8%

科技拨款占国家财政支出的比重为4.1%

其中中央财政科技拨款占中央财政支出的比重为8.6%

地方财政科技拨款占地方财政支出的比重为2.1%

    1999年科技活动经费支出总额为1284.9亿元

比上年增加156.5亿元

同口径增长13%

企业支出654.6亿元

比上年同口径增长16.6%

研究与开发机构支出496.9亿元

增长9.4%

高等学校支出85.1亿元

增长16.3%

各执行部门支出占全部科技经费支出的比重分别为50.9%、38.7%和6.6%

全年技术开发经费支出567.2亿元

比上年增加88.6亿元

增长18.5%

其中用于新产品开发支出304.6亿元

比上年增加59.4亿元

增长24.2%

劳务费支出270.2亿元

比上年同口径增长12.7%

业务费支出434.8亿元

增长16.1%

固定资产购建支出357.4亿元

增长15.7%

其他支出222.5亿元

增长3.9%

各种用途支出占支出总额的比重分别为:21.0%、33.9%、27.8%和17.3%

5个地区支出额合计达到610亿元

占各省科技经费支出合计的51.6%

    1999年全国研究与试验发展(R&D)经费支出额为678.9亿元

比上年增加127.8亿元

同口径增长17.7%

占国内生产总值(GDP)的比重为0.83%

按研究与试验发展(R&D)人员(全时工作当量)计算的人均研究与试验发展(R&D)经费支出为8.3万元

比上年增加1万元

企业研究与试验发展(R&D)经费支出为336.7亿元

比上年同口径增长19.7%

研究与开发机构支出261.2亿元

增长11.4%

高等学校支出63.5亿元

增长10.8%

各执行部门研究与试验发展(R&D)经费支出占全国研究与试验发展(R&D)经费支出额的比重分别为49.6%、38.5%和9.3%

基础研究支出为33.9亿元

比上年同口径增长13.7%

应用研究支出为151.6亿元

增长19.2%

试验发展支出为493.5亿元

增长17.5%

基础研究、应用研究和试验发展支出占研究与试验发展(R&D)支出总额的比重分别为5.0%、22.3%和72.7%

5个地区支出额合计达到315.4亿

占各省研究与试验发展经费支出合计的54.1%


作者: laoliuya    时间: 2019-04-30 14:09
回复 14# cfwyy

好的,谢谢大佬,我好好学习一下
作者: laoliuya    时间: 2019-04-30 14:10
回复 15# dahe_1984

这个好,可以直接运行
作者: dahe_1984    时间: 2019-05-04 09:30
laoliuya 发表于 2019-04-30 14:10
回复 15# dahe_1984 这个好,可以直接运行

楼上grep的也可以直接运行呀

作者: laoliuya    时间: 2019-05-05 15:21
回复 19# dahe_1984

grep在哪运行
作者: dahe_1984    时间: 2019-05-07 17:12
laoliuya 发表于 2019-05-05 15:21
回复 19# dahe_1984 grep在哪运行

给4楼10块钱,4楼回答你

作者: laoliuya    时间: 2019-05-24 13:38
本帖最后由 laoliuya 于 2019-05-24 20:18 编辑

回复 21# dahe_1984

4楼是我自己啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2