2011-11-06 2 views
0

많은 문장이있는 (실행중인) 텍스트가 있습니다. 나는 마침표, 질문 또는 느낌표로 끝나는 문장을 추출 할 수있는 정규 표현식을 가지고있다. 문장의 끝에는 다음 문장의 시작 부분이 와야합니다 (공백/탭/줄 바꿈 및 대문자 또는 숫자). 나는 데이터에 저장된 문자열을 읽고 정규 표현식을 호출한다.문장과 장 텍스트를 구별하는 정규식

basic_pat = re.compile(r"[(']?\w.+[)']?[?.!](?=\s+[A-Z\d])") 
result = basic_pat.findall(data) 

약식 사례를 고려하지 않으면이 정규식이 작동하는 것으로 보입니다. 본문에는 마침표로 끝나지 않는 챕터 텍스트가있을 수도 있습니다. 예를 들어 :

이 여기에 첫 번째 챕터
첫 번째 문장이다. 여기 두 번째 문장이 있습니다. 여기에 세 번째 문장이 있습니다. 여기 는

내 질문이이 문장을 읽는 정규식뿐만 아니라 단지 장 텍스트를 읽는 하나의 정규식이 가능한 경우는 ... 네 번째 전송됩니다. 챕터는 마침표가없는 줄에있는 느슨한 텍스트입니다. 정규 문장은 여러 줄을 포함 할 수 있습니다. 즉, 문장에는 마침표가없는 줄에 텍스트가있을 수도 있습니다. 정규 표현식으로 두 상황 (장 대 문장)을 구별하는 것이 가능합니까?

+0

따옴표는 잊지 마십시오. – tchrist

답변

3

일부 사람들은 문제가 발생하면 "알고 있습니다. 나는 정규 표현식을 사용합니다."라고 생각합니다. 이제 그들은 두 가지 문제가 있습니다. 는 - 제이미 자윈 스키 사실

은, 당신이해야 할 것은 (이제 문제가있을 수 있습니다) 정규 표현식을 사용합니다.

먼저, 챕터 헤더와 챕터 제목이 아닌 텍스트를 번갈아 가며 나누십시오. 그런 다음 각 장의 제목이 아닌 문장, 단락, 그리고 무엇이 있는지 검토하십시오.

에 대해 다음을 끊을 :

방문 라이프 치히, 제 하나 장 : Thomaskirchhof 세인트

바흐 박물관 Thomaskirchhof 반대 성 토마스 교회에 있습니다. van Beethoven에는 라이프 치히 어디서나 박물관이 없습니다.

자연어 처리는 매우 어렵습니다. 하나님은 바벨탑을 파괴 할 때 철저한 일을하셨습니다.

+0

+1 해학적 인 대답을 위해 :-) –

+0

당신은 이것을 위해 regexes를 사용합니다; 차이점은 * 오직 * 정규식을 사용하지 않는다는 것입니다. 당신은 당신의 성도로부터 당신의 거리를 분류 할 수있는 가능성있는 문장 엔딩을 모델링하기 위해 기계 학습을 사용해야 할 것입니다. 또한 베토벤의 "반"은 가짜입니다. 봐봐. 잘 형성된 영어 문장은 소문자로 시작하는 것이 허용되지 않습니다. 그러나 이는 그 정의를 충족시키지 못하는 것을 파싱하는 데 도움이되지 않습니다. – tchrist

+0

@tchrist - 다음을 의미합니다. 위키 백과 : [http://en.wikipedia.org/wiki/Ludwig_van_Beethoven](http://en.wikipedia.org/wiki/Ludwig_van_Beethoven)? – Malvolio

관련 문제