完全停止后没有空格时如何将文本拆分成句子?

时间:2017-02-24 18:28:59

标签: python regex nlp nltk

我有一个像

这样的文字 Lapindo Brantas Inc.经营的东爪哇泗水附近的一口气井自去年5月开始喷出泥浆,淹没了村庄,工业和田地。东爪哇泗水附近的一口气井由PT Lapindo Brantas经营自去年5月以来,淹没了村庄,工厂和田地。自上周以来,印度尼西亚社会福利协调部长Aburizal Bakrie(其家族企业控制Lapindo Brantas)说,这座火山是一场与钻探活动无关的“自然灾害”。 。总统Susilo Bambang Yudhoyono上个月命令Lapindo支付3.8万亿卢比(4.207亿美元)的赔偿和费用

我想把它分成句子。 NLTK或我在网上找到的任何标准正则表达式都失败了。

2 个答案:

答案 0 :(得分:4)

您可以使用正则表达式正向前瞻为句子末尾添加空格,然后将其传递给您选择的工具。这会为尚未拥有的句点添加空格,但会跳过逗号等非字母数字。通过坚持使用角色类而不是split,这适用于任何语言。

const str = "SOP1a+bEOP1+SOP2SOP3a'+bEOP3'+SOP3b'+aEOP3'EOP2";
const regex = RegExp(/(SOP[0-9].*EOP[0-9])*\+(SOP[0-9].*EOP[0-9])*/)
const matches = str.match(regex);

console.log('Matches ', matches);
console.log([matches[1],matches[2]]);

您可以通过添加另一个前瞻搜索斜杠来捕获一些网址

A-Z

答案 1 :(得分:1)

您可以使用此正则表达式捕获新句子后面的点

(\.)(?:[A-Z]) 您可以将其传递给re.sub,并使用r'\ 1 \ n'作为替换

parsed_text = re.sub(r'(\.)(?:[A-Z])',r'\1\n',your_text)

您也可以将其拆分为句子列表(但最后会丢失点数)

 sentence_list = re.split(r'\.(?=[A-Z])',your_text)