首页 > 解决方案 > 正则表达式来标记句子python

问题描述

我有一个任务来标记句子,比如 Python is good. C++ good as well.toPython is good.C++ good as well.

我的算法正在这样做,但是当它Python is good.C++ good as well.(点后没有空格)时它不起作用。顺便说一句,我需要考虑的U.S.A.是 1 句话。所以我的考虑是只有在它是little character.BIG CHARACER.

我正在使用类似的东西

re.sub(r"/([.!?])([A-ZА-Я])/g", "/$1 /$2", 'Python is good.C++ is great')

但这对我没有帮助。

标签: pythonregex

解决方案


如果你真的想用正则表达式来分割句子,最简单的就是匹配标点符号而不是句子,

>>> text = "Python is good. C++ is great. Another example: U.S.A."
>>> import re
>>> re.split('(?<=[!.?])', text)
['Python is good.', ' C++ is great.', ' Another example: U.', 'S.', 'A.', ''] 

不过,这并不能很好地处理所有边缘情况。

更好的解决方案是使用:

  • nltk,它使用预训练的英语模型实现了无监督的 Punkt 句子标记器
  • vtext根据Unicode 分段规则(与语言无关)对句子进行标记,
>>> from vtext.tokenize_sentence import UnicodeSentenceTokenizer
>>> tokenizer = UnicodeSentenceTokenizer()
>>> tokenizer.tokenize(text)
['Python is good. ', 'C++ is great. ', 'Another example: U.S.A.'] 

推荐阅读