我有一个像
这样的文字 Lapindo Brantas Inc.经营的东爪哇泗水附近的一口气井自去年5月开始喷出泥浆,淹没了村庄,工业和田地。东爪哇泗水附近的一口气井由PT Lapindo Brantas经营自去年5月以来,淹没了村庄,工厂和田地。自上周以来,印度尼西亚社会福利协调部长Aburizal Bakrie(其家族企业控制Lapindo Brantas)说,这座火山是一场与钻探活动无关的“自然灾害”。 。总统Susilo Bambang Yudhoyono上个月命令Lapindo支付3.8万亿卢比(4.207亿美元)的赔偿和费用我想把它分成句子。 NLTK或我在网上找到的任何标准正则表达式都失败了。
答案 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)