2016-10-08 2 views
0

참고 : 정규식에 익숙하지 않습니다.과학 논문에서 참조를 제거하는 파이썬

과학 기사를 iTunes 트랙으로 변환하고 싶습니다. 이렇게하려면 텍스트를 복사하여 txt 파일에 붙여넣고 음성 트랙으로 변환하십시오. 그러나 내가 이것을 할 때 참고 문헌이 포함되어 컴퓨터의 목소리가 그들을 크게 읽습니다. "(스미스 J. 외 2016)"이것은 참고 문헌이 들어있는 괄호 안에있는 것을 건너 뛰고 싶기 때문에 성가시다. 따라서 나는 음성 트랙으로 변환하기 전에 txt 파일에서 이러한 모든 참조를 제거하는 python 스크립트를 만들고 싶습니다. 나는 다음과 같은 코드로이 작업을 수행 할 수 있다고 생각한다 :

start_ref=find("(") 
finish_ref=find(")", start_ref) 
# then remove all pieces of the string between each start and finish 

을하지만이 충분히 정확하지 않습니다. 대신 정규식을 어떻게 든 사용하고 싶습니다.

사람 (APA 등 대 하버드 예 서로 다른 참조 스타일을 차지하면서) 나에게 나는 다음과 같은 텍스트에서 참조를 제거 반복 할 방법에 대한 몇 가지 예제 코드를 표시 할 수 있습니다 :

"이 방법은있다 (Smith, J. et al., 2014)을 능가하는 것으로 나타 났으며, 그 단점을 극복하는 반면에, 이점이 단점보다 중요한 점은 분명하다. (Jones, A.C. & Karver, B., 2009 , Lubber, H. et al., 2013). "

누구든지 샘플 코드를 제공 할 수 있습니까?

+1

나는 당신이 참조와 다른 괄호 안의 구를 구별하기 위해 정규 표현식 이상을 필요로 할 것이라고 생각한다. – chepner

+0

@ chepner의 코멘트를 반향, regexes 가능성이 충분하지 않습니다. 자연 언어 처리를 살펴볼 수도 있습니다. – MattDMo

+0

Harvard * 또는 * APA와 같은 다른 스타일 중 하나만 먹는 것은 이미 상당한 도전입니다. Blithely는 두 가지 모두 잡으려고 시도하지만 더 많은 잘못된 일치로 이어질 것입니다. – usr2564301

답변

1

이 트릭을 수행해야합니다

그것은에 의해 대체
import re 

a = "This method has been shown to outperform previously discussed methods (Smith, J. et al., 2014) and while it has its draw-backs, it is clear that the benefits outweigh the disadvantages (Jones, A. & Karver, B., 2009, Lubber, H. et al., 2013)." 

a = re.sub(r"\s\([A-Z][a-z]+,\s[A-Z][a-z]?\.[^\)]*,\s\d{4}\)", "", a) 

""(즉, 아무것도) 공간, ( 만들어진 모든 문자열, 하나의 대문자가 하나 이상의 소문자 뒤에 없습니다 (즉 이름) , 쉼표, 공백, 하나의 대문자 및 한 점 (선택적으로 Christine과 같은 이름의 경우 소문자로 분리되어 Ch.으로 요약 될 수 있음), 쉼표, 공백, 4 자리 및 닫는 괄호 요약하면, (Azdfs, E. stuff 2343)과 같은 모든 것을 삭제해야한다고 가정합니다. 나는 그것이 과다 감지를하지 않을 정도로 충분해야한다고 생각한다.

내 코드를 얻을 출력은 This method has been shown to outperform previously discussed methods and while it has its draw-backs, it is clear that the benefits outweigh the disadvantages.

2

뭔가

import re 
text = ... 
re.sub(r'\((?:[\w \.&]+\,)+[0-9]{4}\)', text) 

같은 것은 그것을 할 것입니다. Debuggex을 사용하여 정규식에서 자신을 트레이닝 할 수 있습니다.

관련 문제