我有一条短信
由Lapindo Brantas in .运营的东爪哇泗水附近的一口气井自去年5月开始喷出蒸腾的泥浆,淹没了村庄、工业和油田。由PT Lapindo Brantas运营的东爪哇泗水附近的一口气井自去年5月以来已喷出蒸汽泥浆,淹没了村庄、工厂和印度尼西亚社会福利协调部长Aburizal Bakrie,其家族公司控制着Lapindo Brantas,他说火山是一场“自然灾害”,与上个月钻探activities.President Susilo Bambang Yudhoyono无关,该公司命令Lapindo支付3.8万亿卢比(4.207亿美元)的赔偿金和费用。
我想把它分成几个句子。NLTK或我在网上发现的任何标准正则表达式都失败了。
发布于 2017-02-24 18:40:28
您可以使用正则表达式正向前看,在句子末尾添加空格,然后将其传递给您选择的工具。这将为没有句点的句点添加一个空格,但跳过非字母数字(如逗号)。通过坚持字符类而不是A-Z,这适用于任何语言。
>>> re.sub(r'\.(?=[^ \W\d])', '. ', 'Foo bar.Baz Inc., foobar. 1.1, and abc._')
'Foo bar. Baz Inc., foobar. 1.1, and abc. _'您可以通过添加另一个前瞻性搜索斜杠来捕获一些urls。
>>> re.sub(r'\.(?=[^ \W\d])(?=[^\w*]/)', '. ', 'Foo bar.Baz Inc., foobar. 1.1, and abc._ http://www.example.com/whatever')
'Foo bar.Baz Inc., foobar. 1.1, and abc._ http://www.example.com/whatever'发布于 2017-02-24 18:34:23
您可以使用这个正则表达式来捕捉后面跟着新句子的点。
(\.)(?:[A-Z]) --您可以用r‘\1\n作为替换将其传递给re.sub
parsed_text = re.sub(r'(\.)(?:[A-Z])',r'\1\n',your_text)
你也可以把它分割成一个句子列表(但你在结尾会失去点)。
sentence_list = re.split(r'\.(?=[A-Z])',your_text)https://stackoverflow.com/questions/42445842
复制相似问题