2016-10-20 11 views
0

필자가 게시 한 기사의 수를 기록하고 멘토와 기관을 포함시켜 검색 범위를 좁히려면 200 개가 넘는 항목을 pubmed로 입력하려고합니다. biopython과 xlrd (코드는 아래)를 사용하여이 작업을 시도했지만, 세 가지 형식의 질의 (이름 1., 이름 2. 기관 이름 3. 이름 및 멘토 이름). 내가 할 수있는 문제 해결 단계가 있습니까, 아니면 아래 표시된 키워드를 사용하여 pubmed에서 검색 할 때 다른 형식을 사용해야합니까?biopython을 사용하여 pubmed에서 검색

입력 쿼리의 출력 예 : search_term은 입력 쿼리 목록이있는 연결 목록입니다.

Entrez.email = "[email protected]" 
for search_term in search_terms[8:55]: 
    handle = Entrez.egquery(term="{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0])) 

    handle_1 = Entrez.egquery(term = "{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[2])) 

    handle_2 = Entrez.egquery(term = "{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[1])) 

    record = Entrez.read(handle) 
    record_1 = Entrez.read(handle_1) 
    record_2 = Entrez.read(handle_2) 
    pubmed_count = ['','',''] 
    for row in record["eGQueryResult"]: 
     if row["DbName"] == "pubmed": 
      pubmed_count[0] = row["Count"] 

    for row in record_1["eGQueryResult"]: 
     if row["DbName"] == "pubmed": 
      pubmed_count[1] = row["Count"] 

    for row in record_2["eGQueryResult"]: 
     if row["DbName"] == "pubmed": 
      pubmed_count[2] = row["Count"] 

답변

1

하여 들여 쓰기를 확인, 어떤 루프에 속해있는 부분을 알고 어렵다 :

print(*search_term[8:15], sep='\n') 


[text:'Andrew Bland', 'Weill Cornell Medical College', text:'David Cutler MD'] 
[text:'Andy Price', 'University of Alabama at Birmingham School of Medicine', text:'Jason Warem, PhD'] 
[text:'Bah Chamin', 'University of Texas Southwestern Medical School', text:'Dr. Timothy Hillar'] 
[text:'Eduo Cera', 'University of Colorado School of Medicine', text:'Dr. Tim'] 

코드는 위의 입력 쿼리를 생성하고 Pubmed를 검색하는 데 사용됩니다.

문제를 해결하려면 egquery을 인쇄 해보십시오.

print("{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0])) 

출력을 붙여 넣고 출력을 봅니다. 아마도 조금 수정하고 어떤 검색어가 문제를 일으키는 지 확인하십시오.

입력 형식이 약간 추측하기 어렵습니다. 쿼리를 인쇄하고 올바른 검색 값을 얻고 있는지 확인하십시오.

저자명은 학술 제목을 없애고 PubMed가 이니셜과 혼동을 줄 수 있습니다. 예 : 하우스 메릴랜드, 마크 데이빗 하우스일지도 몰라.

+0

'텍스트 :'를 없애는 방법이 있습니까? 나는 문자열의 일부라고 생각하지 않으므로 str.replace를 사용할 수 없습니다. –

+0

어디에서 검색 단어를 얻었습니까? –

+0

미리 학생 이름, 학교 이름 및 멘토 이름으로 세 개의 목록을 만들었습니다. 그런 다음 search_terms에 추가했습니다. –