首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python/NLP提取文本文件中的所有段落标题

使用Python/NLP提取文本文件中的所有段落标题
EN

Stack Overflow用户
提问于 2019-12-21 01:13:31
回答 2查看 2.4K关注 0票数 1

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

代码语言:javascript
复制
if (capitalized) and heading_length <50:
    return heading_text

在NLTK或NLP中是否有什么东西可以帮助我们做到这一点,而不只是检查大写字母和单词长度呢?

这是一场古老的卡格尔比赛

职责

311名主任负责信息技术机构311呼叫中心的成功运作和扩大,该中心负责接听选民关于城市各部门提供的全城市服务的呼叫;努力确保高效率和有效地解决可能出现的任何问题;规划、指导、雇用、教练和协调大量专业、技术和文书工作人员,从事城市311呼叫中心的实施、管理和运作;在建设和维持有效的工作队伍方面应用健全的监督原则和技术;履行平等机会责任;并开展相关工作。

要求

  1. 在洛杉矶担任高级管理分析员一年的全职有偿工作经验,或至少在提供与呼叫中心相关的监督或管理工作方面的专业经验的班级中,至少有50名呼叫代理或每年至少接到100万次电话的呼叫中心;或
  2. :在具有至少50个呼叫代理或至少每年接收100万个电话的呼叫中心环境中获得学士学位和四年全职付费工作经验,其中两年必须监督在这样一个呼叫中心工作的工作人员;或
  3. 在呼叫中心环境中拥有至少50个呼叫代理或呼叫中心每年至少接收100万个电话的全职付费经验,其中两年必须监督在这样一个呼叫中心工作的工作人员。

备注:

  1. 除了普通的城市申请外,所有申请人必须在提交时填写311份董事资格问卷。311名董事资格问卷位于纽约市申请的资格问题部分。没有完成资格问卷的申请人将不会在这次考试中被进一步考虑,他们的申请将不是processed.
  2. Applicants谁缺乏6个月或更少的所需经验,可以申请这次考试。然而,在完全满足经验要求之前,他们是无法被任命的。与销售和电话营销有关的
  3. 呼叫中心经验是

Relations系统的专业知识,包括实施、集成和知识库创建。

申请地点

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

注意:

如果有大量合格的候选人申请参加这一考试,则可召集一个专家审查委员会,评估每名候选人担任311名主任的资格。在这一评估中,专家审查委员会将根据申请人所在城市的就业申请和资格问卷中的信息,评估每个申请人的培训和经验。专家审查委员会认为最有可能成功履行311名主任职责的候选人将被邀请参加面试。

EN

回答 2

Stack Overflow用户

发布于 2019-12-21 04:54:59

您可以使用正则表达式。

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
['DUTIES', 'REQUIREMENTS', 'NOTES:', 'WHERE TO APPLY', 'NOTE:']

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

票数 1
EN

Stack Overflow用户

发布于 2019-12-21 08:59:06

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

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

代码语言:javascript
复制
for line in text.split('\n'):
    is_header = (line.upper() == line)

你的例子没有任何长的全大写行,所以我不认为你真的需要检查长度,但是如果你想的话,你可以。它也可以使您的代码更快,但取决于您有多少文本,它可能并不重要。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59432841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档