2011-08-25 119 views
4

我希望將文本拆分成句子。誰能幫我?將文本拆分成句子

我還需要處理縮寫。但是我的計劃是在早期階段取代它們。先生 - >老總

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.等。

+0

也許你應該描述你認爲的一個句子。 – 2011-08-25 10:28:35

+0

看看[pyparsing](http://pyparsing.wikispaces.com/) – MattH

回答

5

句子分段可能是一項非常困難的任務,特別是當文本包含虛線縮寫時。它可能需要使用已知縮寫列表或訓練分類器來識別它們。

我建議你使用NLTK--它是一套開源的Python模塊,專爲自然語言處理而設計。

您可以閱讀有關使用NLTK here, 句子切分,並決定爲自己,如果這個工具適合你。

編輯:或者也可以簡單here這裏是source code。 這是Punkt語句標記器,包含在NLTK中。

+0

即時通訊使用Python 3和NLTK不是爲此而構建的。我已經有一大堆縮寫,我相信我可以在早期階段處理這個問題。 – Baz

+1

嗯...也許你可以使用Punkt源代碼,並將其調整爲Python 3?第二個想法,將需要大量的工作.. –

+0

在'EDITED'部分的鏈接已經死亡。 –