2014-04-22 2 views
0

나는 fileID를 잡고 grabFile 함수로 만든 다음 sentcount 문으로 문장 수를 계산하려고합니다. 이제 모든 문장 수가 0이됩니다. 방금 돌아 봤어. 문제는 내 grabAbs가 나를 위해 추상을 잡지 않는다는 것입니다. 누구든지 코드를 확인하고 문제점을 알 수있게 도와 줄 수 있습니까? 감사.문자열의 항목 수를 계산하는 방법

grabFile=re.findall(r'File\s+\:\s+(\w\d{7})',mytext) 
if len(grabFile) == 0: 
    matchFile= "N/A" 
else: 
    matchFile = grabFile[0] 

newtext=re.sub(r'\n','',mytext) 
newtext=re.sub(r'\s+','',newtext) 
grabAbs=re.findall(r'Abstract\s+\:(\w.+)',newtext) 
if len(grabAbs) == 0: 
    matchAbs= "N/A" 
else: 
    matchAbs = grabAbs 

#filesents={} 
sentcount=0 
for each in matchAbs.split('\.'): 
    if each =='N/A': 
     sentcount=0 
    else: 
     sentcount +=1 
    print sentcount, matchFile 

파일 중 하나 (a95000006)의 추상에서 텍스트 :

추상 :
는 9,500,006 왕 산업 학술 연락을위한 그랜트 기회 (GOALI) 연구 프로젝트에 대한이상은 개발한다 알루미늄 자동차 공간 프레임의 기하학적 변화를 줄이기위한 새로운 방법론 '

+1

입력 예는 어떨까요? –

+0

예제 출력을 의미합니까? · 0 a95000003 0 a95000006 · –

+0

그는 예제 ** 입력 **을 의미한다고 생각합니다. 'newtext'에 대한 값. – Malvolio

답변

0
이 라인의 정규식

grabAbs=re.findall(r'Abstract\s+\:(\w.+)',newtext)

적어도 하나 개의 공백 문자는 '추상'과 콜론 사이에 항상 존재한다고 가정 ':' 은 내가를 작성하는 경우 추상, 나는 추상적 인 단어 바로 뒤에 콜론을 사용하여 _Abstract : 내 abstract_ 텍스트를 넣을 것입니다. `\ s +`를`\ s *`로 변경하면 콜론 앞에 공백이없는 경우를 허용합니다. 그것을 시도하고 그것이 당신의 문제를 해결하는지보십시오. --EDIT-- 샘플 입력을보고 나면 문제는 콜론 바로 다음에 줄 바꿈이있을 가능성이 높으며 정규식에서 여러 줄 검색 플래그를 설정하지 않은 것일 수 있습니다. 이 시도 :
grabAbs=re.findall(r'Abstract\s+\:(\w.+)',newtext, flags=re.M) 

--EDIT--

@jammon 내가 언급 한 위의 라인은 모든 공백을 제거 지적했다. 따라서 콜론 앞에 공백이 제거됩니다. 또한 위의 행은 모든 개행 문자를 제거합니다. 콜론 뒤의 개행 문자는 제거되므로 캡처 그룹의 \w은 일치 할 수 없습니다. 아마도 캡처 그룹은 (.+)이어야합니다.

grabAbs=re.findall(r'Abstract\:(.+)',newtext) 
+0

그 앞에있는 줄은 모든 공백을 삭제하므로이 줄이 절대로 일치해서는 안됩니다. – jammon

+0

'abstract :'다음에 줄 바꿈이 있었지만 공백으로 줄 바꿈했습니다. 왜 여전히 작동하지 않는지 확실하지 않습니다. 'flags-re.M'도 도움이되지 않지만 여전히 'N/A'를 모두 인쇄합니다. –

+0

@jammon 오, 내, 좋은 잡을! 나는 알지 못했다 – jshanley

관련 문제