【问题标题】:NLP - text extraction in Python using spaCyNLP - 使用 spaCy 在 Python 中提取文本
【发布时间】:2019-06-23 18:30:25
【问题描述】:

我使用 Python 和 spaCy 作为我的 NLP 库。我是 NLP 工作的新手,我希望得到一些指导,以便从文本中提取表格信息。我的目标是找出冻结或不冻结的费用类型。任何指导将不胜感激。

 TYPE_OF_EXPENSE    FROZEN?       NOT_FROZEN?
  purchase order    frozen           null 
     capital        frozen           null
   consulting       frozen           null
business meetings   frozen           null
 external hires     frozen           null
       KM&L          null         not frozen
      travel         null         not frozen


import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(u'Non-revenue-generating purchase order expenditures will be frozen. All capital
         related expenditures are frozen effectively for Q4. Following spending categories
         are frozen: Consulting, (including existing engagements), Business meetings. 
         Please note that there is a hiring  freeze for external  hires, subcontractors 
         and  consulting services. KM&L expenditure will 
         not be frozen. Travel cost will not be on ‘freeze’.)

我的最终目标是将所有这些表格提取到一个 excel 文件中。 即使您可以就上述几个类别提出建议,我也将不胜感激。非常感谢您。

【问题讨论】:

    标签: python nlp spacy


    【解决方案1】:

    如果您给出的示例是您工作中的常见示例,您可以将任务分解为以下步骤:

    1. Defining rules using Spacy 描述句子的模式。例如KM&L expenditure will not be frozen 可能是[{"lower":{"REGEX": "^.*expenditure"}},{"lower":"not"}, {"LEMMA":"be"}, {"LOWER": "frozen"}](我没有测试,所以请相应地进行更改)。您可能需要编写尽可能多的规则。

    2. 使用 NLTK Tokenize (see example) 将段落拆分为句子

    3. 对于每个句子,使用 Spacy 中基于规则的匹配

    4. 要提取TYPE_OF_EXPENSE,根据匹配规则从匹配句子的前面或后面计算字符来获取子字符串KM&L。比如这句KM&L expenditure will not be frozen,可以倒数,因为expenditure will not be frozen是在规则中定义的,字符串的长度是固定的。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      几个问题:这些类别是预定义的吗?它们会保持这种状态吗?如果是这样,您可以简单地只用这些单词构建一个小词汇表并继续努力。 第二件事是先做基本的预处理,比如大小写调整等。

      然后使用某种句子标记器将您的输入拆分为句子。完成此操作后,将这些句子拆分为标记,nltk 有一个很好的标记器,可让您定义短语,因此 new york 将被标记为 new_york 等等。 一旦对每个句子进行标记,只需使用基于窗口的方法,如果您在句子中找到匹配的标记,并且在前后查找 4 个标记,以找到单词 freeze 的任何否定。所以对于一个句子,你可以得到像

      这样的标记
      [All,capital,related,expenditures,are,frozen,effectively,for,Q4]
      

      这将匹配冻结和大写关键字。只需检查冻结之前和之后的窗口大小是否为否定,如果您发现任何标记大写为 False 表示冻结,否则将其标记为 true,因为这可以简单地使用二进制 true/false 列来完成。

      【讨论】:

      • 非常感谢您的回答,但我仍在苦苦挣扎。对于上面提到的每个步骤,您对示例有任何指导吗?
      • nltk.org/book点击此链接并解决其中的练习以掌握基本的经典nlp。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 2018-06-01
      • 2017-06-21
      • 2019-03-12
      • 2018-12-31
      • 2015-02-13
      • 2021-12-09
      相关资源
      最近更新 更多