【问题标题】:Extracting all paragraph headings in a text file using Python/NLP使用 Python/NLP 提取文本文件中的所有段落标题
【发布时间】:2020-04-13 09:58:17
【问题描述】:

我有一个文本文件,其内容如下所示。我需要识别段落标题并从每个提取的段落标题中创建一个 csv 文件列标题。文本文件看起来像下面的文本块。我正在考虑使用如下规则:

if (capitalized) and heading_length <50:
    return heading_text

NLTK 或 NLP 中是否有一些东西可以帮助做到这一点,而无需仅检查大写字母和单词长度的近似方法?

这是一个古老的 Kaggle 比赛

职责

311 主管负责成功运营和 扩大信息技术局的 311 呼叫中心 (ITA) 响应选民关于全市服务的电话 市有关部门提供;努力确保高效和 有效解决可能出现的任何问题;计划、指导、 雇用、指导和协调大量专业人员, 参与实施的技术和文员, 纽约市 311 呼叫中心的管理和运营;适用 建立和维护健全的主管原则和技术 和有效的劳动力;履行平等机会的责任; 并做相关工作。

要求

  1. 在洛杉矶市担任高级管理分析师或至少在 在提供监督或专业经验的水平 与至少有 50 个呼叫代理的呼叫中心有关的管理工作 或每年至少接听一百万个电话的呼叫中心;或
  2. 获得认可的学院或大学的学士学位,并在呼叫中心环境中拥有四年的全职带薪工作经验 至少有 50 个呼叫代理或一个呼叫中心至少接收 每年一百万个电话,其中两年必须是监督 在这样的呼叫中心工作的工作人员;或
  3. 在呼叫中心环境中拥有至少 50 个呼叫代理或呼叫中心的八年全职带薪经验 每年至少 100 万次通话,其中两年必须 监督在此类呼叫中心工作的员工。

注意事项:

  1. 除了常规的城市申请外,所有申请人必须在 归档。 311董事资格问卷位于 在城市申请的资格问题部分。 未能完成资格调查表的申请人将 在本次考试中不再考虑,以及他们的应用 不会被处理。
  2. 缺乏所需经验六个月或以下的申请人可以申请此考试。然而,他们不能被任命,直到 满足全部经验要求。
  3. 不包括与销售和电话营销相关的呼叫中心经验。
  4. 客户关系管理 (CRM) 系统专业知识,包括实施、集成和知识库创建 想要的。

申请地点

只接受在线申请。当您查看 您选择的在线工作公告,只需滚动到顶部 页面并选择“应用”图标。在线招聘公告也是 可在http://agency.governmentjobs.com/lacity/default.cfm 获取 公开竞争性考试和 http://agency.governmentjobs.com/lacity/default.cfm?promotionaljobs=1 用于晋升考试。

注意:

应该有大量合格的候选人为此申请吗 审查时,可召集专家评审委员会进行评估 每位候选人的311董事职位资格。在 此次评估,专家评审委员会将评估每个 申请人的培训和经验基于信息中的信息 申请人的城市就业申请和资格 问卷调查。专家评审考虑的候选人 委员会作为拥有成功的最大可能性 履行 311 董事的职责,完全基于 向委员会提交的信息,将被邀请参加 在采访中。

【问题讨论】:

  • 请具体说明您要查找的内容。您是否尝试匹配全部大写的行?
  • 是的,我正在尝试匹配标题文本 - 全部大写。我有一个“标题文本”的数据字典。但是该字典(一个 Excel 表)将具有全大写字段的完整名称。例如,数据字典将包含 JOB_DUTIES 而不仅仅是文本文件中的“DUTIES”,如上所示。所以我知道职位描述(上面粘贴的)中的 DUTIES 与数据字典中的“JOB_DUTIES”是一样的

标签: python regex nlp nltk kaggle


【解决方案1】:

您可以使用正则表达式。

import re

text = open('sample.txt').read()
pattern = re.compile('([A-Z]+[ ]?[:]?)+\n')

headings = []

for match in pattern.finditer(text):
    s=match.start()
    e = match.end()
    headings.append(text[s:e].replace('\n',''))  

print(headings)

输出:

['DUTIES', 'REQUIREMENTS', 'NOTES:', 'WHERE TO APPLY', 'NOTE:']

要删除 ':' 冒号,可以使用 .replace() 函数

【讨论】:

    【解决方案2】:

    在 NLTK 或其他库中没有检查一段文本是否为文档标题的通用函数。虽然您正在使用的文档将标题大写,但这不是通用约定。

    在你的情况下,我会这样做:

    for line in text.split('\n'):
        is_header = (line.upper() == line)
    

    您的示例没有任何长的全大写行,因此我认为您实际上不需要检查长度,但如果您愿意,可以这样做。它还可以使您的代码更快,但取决于您拥有多少文本可能并不重要。

    您可以学习一个统计模型来将行分类为标题和非标题,但是如果您的所有文档看起来都像您的示例,我认为上面的代码很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 2019-06-23
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多