使用Python中的pyparsing解析非结构化文本

时间:2014-10-12 10:55:49

标签: python pyparsing

我有数百个公司报告.txt文件,我想从中提取一些信息。例如,文件的一部分如下所示:

Mr. Davido will receive a base salary of $700,000 during the initial and any subsequent 
term. The Chief Executive Officer of the Company (the CEO) and the Board (or a committee
thereof) shall review Mr. Davidos base salary at least annually, and may increase it at 
any time in their sole discretion

我正在尝试使用pyparsing来提取该人的基本工资值。

代码

from pyparsing import * 

# define grammar
digits = "0123456789"
integer = Word( digits )
money = Group("$"+integer+','+integer + Optional(','+integer , ' '))
start = Word("base salary") 
salary = start + money

#search
for t in text:
  result = salary.parseString( text )
print result

这总是会出错:

pyparsing.ParseException: Expected W:(base...) (at char 0), (line:1, col:1)

经过一些简单的测试后,我发现使用这段代码我只能从特定的文本形式中找到我想要的东西:

"base salary $700,000......"

并且它只能识别该文本中出现的第一个案例。

所以我想知道是否有人可以帮助我。并且,如果可能的话,还要确定该人的姓名,并将名称和工资存储到数据框中。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我先回答你的具体问题。当您定义了一个与文本开头的所有内容匹配的综合语法时,将使用parseString。由于您尝试从输入行中间的某处选择特定短语,请改用searchString或scanString。

作为pyparsing的作者,我会同意@ Tritium21 - 除非有一些你可以寻找的特定形式和短语,否则你会试图解析这种自然语言输入。