neurosynth/base/dataset.py
def download_abstracts(dataset, path='.', email=None, out_file=None):
    """ Download the abstracts for a dataset/list of pmids
    """
    try:
        from Bio import Entrez, Medline
    except:
        raise Exception(
            'Module biopython is required for downloading abstracts from PubMed.')

    if email is None:
        raise Exception('No email address provided.')
    Entrez.email = email

    if isinstance(dataset, Dataset):
        pmids = dataset.image_table.ids.astype(str).tolist()
    elif isinstance(dataset, list):
        pmids = [str(pmid) for pmid in dataset]
    else:
        raise Exception(
            'Dataset type not recognized: {0}'.format(type(dataset)))

    records = []
    # PubMed only allows you to search ~1000 at a time. I chose 900 to be safe.
    chunks = [pmids[x: x + 900] for x in range(0, len(pmids), 900)]
    for chunk in chunks:
        h = Entrez.efetch(db='pubmed', id=chunk, rettype='medline',
                          retmode='text')
        records += list(Medline.parse(h))

    # Pull data for studies with abstracts
    data = [[study['PMID'], study['AB']]
            for study in records if study.get('AB', None)]
    df = pd.DataFrame(columns=['pmid', 'abstract'], data=data)
    if out_file is not None:
        df.to_csv(os.path.join(os.path.abspath(path), out_file), index=False)
    return df
def download_abstracts(dataset, path='.', email=None, out_file=None):
    """ Download the abstracts for a dataset/list of pmids
    """
    try:
        from Bio import Entrez, Medline
    except:
        raise Exception(
            'Module biopython is required for downloading abstracts from PubMed.')

    if email is None:
        raise Exception('No email address provided.')
    Entrez.email = email

    if isinstance(dataset, Dataset):
        pmids = dataset.image_table.ids.astype(str).tolist()
    elif isinstance(dataset, list):
        pmids = [str(pmid) for pmid in dataset]
    else:
        raise Exception(
            'Dataset type not recognized: {0}'.format(type(dataset)))

    records = []
    # PubMed only allows you to search ~1000 at a time. I chose 900 to be safe.
    chunks = [pmids[x: x + 900] for x in range(0, len(pmids), 900)]
    for chunk in chunks:
        h = Entrez.efetch(db='pubmed', id=chunk, rettype='medline',
                          retmode='text')
        records += list(Medline.parse(h))

    # Pull data for studies with abstracts
    data = [[study['PMID'], study['AB']]
            for study in records if study.get('AB', None)]
    df = pd.DataFrame(columns=['pmid', 'abstract'], data=data)
    if out_file is not None:
        df.to_csv(os.path.join(os.path.abspath(path), out_file), index=False)
    return df
def download_abstracts ( dataset , path = '.' , email = None , out_file = None ) : try : from Bio import Entrez , Medline except : raise Exception ( 'Module biopython is required for downloading abstracts from PubMed.' ) if email is None : raise Exception ( 'No email address provided.' ) Entrez . email = email if isinstance ( dataset , Dataset ) : pmids = dataset . image_table . ids . astype ( str ) . tolist ( ) elif isinstance ( dataset , list ) : pmids = [ str ( pmid ) for pmid in dataset ] else : raise Exception ( 'Dataset type not recognized: {0}' . format ( type ( dataset ) ) ) records = [ ] # PubMed only allows you to search ~1000 at a time. I chose 900 to be safe. chunks = [ pmids [ x : x + 900 ] for x in range ( 0 , len ( pmids ) , 900 ) ] for chunk in chunks : h = Entrez . efetch ( db = 'pubmed' , id = chunk , rettype = 'medline' , retmode = 'text' ) records += list ( Medline . parse ( h ) ) # Pull data for studies with abstracts data = [ [ study [ 'PMID' ] , study [ 'AB' ] ] for study in records if study . get ( 'AB' , None ) ] df = pd . DataFrame ( columns = [ 'pmid' , 'abstract' ] , data = data ) if out_file is not None : df . to_csv ( os . path . join ( os . path . abspath ( path ) , out_file ) , index = False ) return df
Download the abstracts for a dataset/list of pmids
Download the abstracts for a dataset / list of pmids