python - 正则表达式来标记句子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')
但这对我没有帮助。
解决方案
如果你真的想用正则表达式来分割句子,最简单的就是匹配标点符号而不是句子,
>>> 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.']
推荐阅读
- xcode - 使用 antlr4 解析 iOS/macOS 可本地化的字符串文件
- c++ - 将一对插入地图并增加计数?
- python - 如何找到当前函数的名称?
- php - 这段代码,但部分 href='allowbook.php?giv= '
- javascript - Range slider with min and max values limites
- javascript - 如何通过过滤获取的数据来更新状态?
- c# - 在 TT 自动化脚本中跳过解决方案文件夹
- r - 拟合 DCC GARCH 模型后 Li Mak 检验的误差
- machine-learning - 强化学习 - 如何处理进行数字近似的不同数量的动作
- javascript - 为什么我不能在 addEventListener 中调用类函数