将文本分割成句子

5 投票
1 回答
8040 浏览
提问于 2025-04-17 00:19

我想把文本分成句子。有没有人能帮我一下?

我还需要处理缩写。不过我的计划是在更早的阶段就把这些缩写替换掉。比如,Mr. 替换成 Mister。

import re  
import unittest    

class Sentences:

    def __init__(self,text):
        self.sentences = tuple(re.split("[.!?]\s", text))

class TestSentences(unittest.TestCase):

    def testFullStop(self):
        self.assertEquals(Sentences("X. X.").sentences, ("X.","X."))

    def testQuestion(self):
        self.assertEquals(Sentences("X? X?").sentences, ("X?","X?"))

    def testExclaimation(self):
        self.assertEquals(Sentences("X! X!").sentences, ("X!","X!"))

    def testMixed(self):
        self.assertEquals(Sentences("X! X? X! X.").sentences, ("X!", "X?", "X!", "X."))

谢谢,

巴里

编辑:首先,我希望能满足我上面提到的四个测试。这会帮助我更好地理解正则表达式是怎么工作的。现在我可以把句子定义为我测试中提到的 X 等等。

1 个回答

5

句子分割可能是个很难的事情,特别是当文本中有缩写的时候。这可能需要用到一些已知缩写的列表,或者训练一个分类器来识别它们。

我建议你使用NLTK——这是一个开源的Python模块集合,专门用于处理自然语言。

你可以在这里了解如何使用NLTK进行句子分割,看看这个工具是否适合你。

补充一下:更简单的方式是这里,还有源代码。这是NLTK中包含的Punkt句子分割器。

撰写回答