2011-08-25 6 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

어쩌면 문장을 어떻게 생각하는지 설명해야합니다. –

+0

[pyparsing] (http://pyparsing.wikispaces.com/)을 보시오. – MattH

답변

5

문장 분할 작업은 특히 텍스트에 점선으로 된 약어가있는 경우 매우 어려울 수 있습니다. 알려진 약어의 목록을 사용하거나 훈련 분류자를 사용하여이를 인식해야 할 수도 있습니다.

자연 언어 처리를 위해 설계된 오픈 소스 Python 모듈 모음 인 NLTK를 사용하는 것이 좋습니다.

당신은 NLTK here, 사용하여 문장 분할에 대해 읽고이 도구는 당신을 맞는 경우 직접 결정할 수 있습니다.

편집 : 나 여기 심지어 here을 간단하고하면 source code입니다. NLTK에 포함 된 Punkt sentence tokenizer입니다.

+0

저는 파이썬 3과 NLTK를 사용하지 않았습니다. 아직 작성하지 않았습니다. 나는 이미 큰 약어 목록을 가지고 있으며 나는이 문제를 조기에 처리 할 수 ​​있다고 생각한다. – Baz

+1

Hmmm ... 어쩌면 Punkt 소스 코드를 사용하여 Python 3으로 조정할 수 있습니까? 두 번째 생각은 많은 일을해야 할 것입니다 .. –

+0

'EDITED' 섹션의 링크가 죽었습니다. –