python - NLTK punkt 句子标记器在数字项目符号上拆分
问题描述
我正在使用 nltk PunktSentenceTokenizer 将段落分成句子。我有如下段落:
段落=“1.候选人数学很差。2.人际交往能力很好。3.对社会工作非常热心”
输出: ['1.', '应聘者数学很差', '2.', '人际交往能力很好', '3.', '对社会工作很热心']
我尝试使用下面的代码添加发送的启动器,但这甚至没有成功。
from nltk.tokenize.punkt import PunktSentenceTokenizer
tokenizer = PunktSentenceTokenizer()
tokenizer._params.sent_starters.add('1.')
如果有人能把我推向正确的方向,我真的很感激
提前致谢 :)
解决方案
使用正则表达式可以为此类问题提供解决方案,如下面的代码所示:
paragraphs = "1. Candidate is very poor in mathematics. 2. Interpersonal skills are good. 3. Very enthusiastic about social work"
import re
reSentenceEnd = re.compile("\.|$")
reAtLeastTwoLetters = re.compile("[a-zA-Z]{2}")
previousMatch = 0
sentenceStart = 0
end = len(paragraphs)
while(True):
candidateSentenceEnd = reSentenceEnd.search(paragraphs, previousMatch)
# A sentence must contain at least two consecutive letters:
if reAtLeastTwoLetters.search(paragraphs[sentenceStart:candidateSentenceEnd.end()]) :
print(paragraphs[sentenceStart:candidateSentenceEnd.end()])
sentenceStart = candidateSentenceEnd.end()
if candidateSentenceEnd.end() == end:
break
previousMatch=candidateSentenceEnd.start() + 1
输出是:
- 候选人的数学很差。
- 人际交往能力很好。
- 非常热衷于社会工作
包括(nltk 和 Spacy)在内的许多分词器都可以处理正则表达式。不过,将此代码适应他们的框架可能并非易事。
推荐阅读
- python - 从匹配条件的 pandas 数据框中选择行
- python - 使用汇集4个不同列表的数据制作表格
- json - 将 response.body 映射到模型类
- matlab - Matlab的detectMaskRCNN函数误差与变量之间的大小差异
- mysql - MySql COUNT(column_name = 'foobar' or null) 如何工作?
- python - google.cloud.bigquery 库将在 DataLab 实例中运行 SQL 查询,但不在容器优化的 VM 中
- python - Python 虚拟环境操作系统 PATH 问题
- html - 识别当今超高分辨率智能手机中的目标设备,以选择要运行的 css 文件
- java - 在不更改 spring-boot-starter-parent 版本的情况下,我应该如何只降级我的 springboot 应用程序运行的 tomcat 服务器
- r - Ops.factor(rf_mod, target) 中的错误:因子的级别集不同