【问题标题】:Split text into sentences [duplicate]将文本拆分成句子[重复]
【发布时间】:2011-11-03 13:23:19
【问题描述】:

我希望将文本拆分成句子。谁能帮帮我?

我还需要处理缩写。但是我的计划是在更早的阶段替换这些。先生->先生

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. 等,就像我的测试中定义的那样。

【问题讨论】:

  • 也许你应该描述你认为的句子。
  • 看看pyparsing

标签: python regex python-3.x text-segmentation


【解决方案1】:

句子分割可能是一项非常困难的任务,尤其是当文本包含带点的缩写时。它可能需要使用已知缩写列表,或训练分类器来识别它们。

我建议您使用 NLTK - 它是一套开源 Python 模块,专为自然语言处理而设计。

您可以阅读有关使用 NLTK 进行句子分割的信息here, 并自行决定此工具是否适合您。

EDITED:或者更简单的 here,这里是 source code。 这是 NLTK 中包含的 Punkt 句子标记器。

【讨论】:

  • 我正在使用 Python 3 并且 NLTK 还没有为此构建。我已经有大量的缩写列表,我相信我可以在更早的阶段处理这个问题。
  • 嗯...也许您可以使用 Punkt 源代码,并将其调整为 Python 3?再想一想,这需要做很多工作..
  • EDITED 部分中的链接已失效。
猜你喜欢
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2013-04-28
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多