CoolFace
Datasetpublic

malteos/paperswithcode-aspects

Papers with aspects from paperswithcode.com dataset

sourceHugging Faceupdated 5y agoView on Hugging Face
0likes16downloads
paperswithcode-aspects.py157 linesDownload Raw Back to root
1from __future__ import absolute_import, division, print_function2 3import json4import os5import sys6 7import datasets8from pyarrow import csv9 10_DESCRIPTION = """Papers with aspects from paperswithcode.com dataset"""11 12_HOMEPAGE = "https://github.com/malteos/aspect-document-embeddings"13 14_CITATION = '''@InProceedings{Ostendorff2022,15  title = {Specialized Document Embeddings for Aspect-based Similarity of Research Papers},16  booktitle = {Proceedings of the {ACM}/{IEEE} {Joint} {Conference} on {Digital} {Libraries} ({JCDL})},17  author = {Ostendorff, Malte and Blume, Till, Ruas, Terry and Gipp, Bela and Rehm, Georg},18  year = {2022},19}'''20 21DATA_URL = "http://datasets.fiq.de/paperswithcode_aspects.tar.gz"22 23DOC_A_COL = "from_paper_id"24DOC_B_COL = "to_paper_id"25LABEL_COL = "label"26 27# binary classification (y=similar, n=dissimilar)28LABEL_CLASSES = labels = ['y', 'n']29 30ASPECTS = ['task', 'method', 'dataset']31 32 33def get_train_split(aspect, k):34    return datasets.Split(f'fold_{aspect}_{k}_train')35 36 37def get_test_split(aspect, k):38    return datasets.Split(f'fold_{aspect}_{k}_test')39 40 41class PWCConfig(datasets.BuilderConfig):42    def __init__(self, features, data_url, aspects, **kwargs):43        super().__init__(version=datasets.Version("0.1.0"), **kwargs)44        self.features = features45        self.data_url = data_url46        self.aspects = aspects47 48 49class PWCAspects(datasets.GeneratorBasedBuilder):50    """Paper aspects dataset."""51 52    BUILDER_CONFIGS = [53        PWCConfig(54            name="docs",55            description="document text and meta data",56            # Metadata format from paperswithcode.com57            # see https://github.com/paperswithcode/paperswithcode-data58            features={59                "paper_id": datasets.Value("string"),60                "paper_url": datasets.Value("string"),61                "title": datasets.Value("string"),62                "abstract": datasets.Value("string"),63                "arxiv_id": datasets.Value("string"),64                "url_abs": datasets.Value("string"),65                "url_pdf": datasets.Value("string"),66                "aspect_tasks": datasets.Sequence(datasets.Value('string', id='task')),67                "aspect_methods": datasets.Sequence(datasets.Value('string', id='method')),68                "aspect_datasets": datasets.Sequence(datasets.Value('string', id='dataset')),69            },70            data_url=DATA_URL,71            aspects=ASPECTS,72        ),73        PWCConfig(74            name="relations",75            description=" relation data",76            features={77                DOC_A_COL: datasets.Value("string"),78                DOC_B_COL: datasets.Value("string"),79                LABEL_COL: datasets.Value("string"),80            },81            data_url=DATA_URL,82            aspects=ASPECTS,83        ),84    ]85 86    def _info(self):87        return datasets.DatasetInfo(88            description=_DESCRIPTION + self.config.description,89            features=datasets.Features(self.config.features),90            homepage=_HOMEPAGE,91            citation=_CITATION,92        )93 94    def _split_generators(self, dl_manager):95        arch_path = dl_manager.download_and_extract(self.config.data_url)96 97        if "relations" in self.config.name:98            train_file = "train.csv"99            test_file = "test.csv"100 101            generators = []102 103            # for k in [1, 2, 3, 4]:104            for aspect in self.config.aspects:105                for k in ["sample"] + [1, 2, 3, 4]:106                    folds_path = os.path.join(arch_path, 'folds', aspect, str(k))107                    generators += [108                        datasets.SplitGenerator(109                            name=get_train_split(aspect, k),110                            gen_kwargs={'filepath': os.path.join(folds_path, train_file)}111                        ),112                        datasets.SplitGenerator(113                            name=get_test_split(aspect, k),114                            gen_kwargs={'filepath': os.path.join(folds_path, test_file)}115                        )116                    ]117            return generators118 119        elif "docs" in self.config.name:120            # docs121            docs_file = os.path.join(arch_path, "docs.jsonl")122 123            return [124                datasets.SplitGenerator(name=datasets.Split('docs'), gen_kwargs={"filepath": docs_file}),125            ]126        else:127            raise ValueError()128 129    @staticmethod130    def get_dict_value(d, key, default=None):131        if key in d:132            return d[key]133        else:134            return default135 136    def _generate_examples(self, filepath):137        """Generate docs + rel examples."""138 139        if "relations" in self.config.name:140            df = csv.read_csv(filepath).to_pandas()141 142            for idx, row in df.iterrows():143                yield idx, {144                    DOC_A_COL: str(row[DOC_A_COL]),145                    DOC_B_COL: str(row[DOC_B_COL]),146                    LABEL_COL: row['label'],  # !!! labels != label147                }148 149        elif self.config.name == "docs":150            with open(filepath, 'r') as f:151                for i, line in enumerate(f):152                    doc = json.loads(line)153                    # extract feature keys from doc154                    features = {k: doc[k] if k in doc else None for k in self.config.features.keys()}155 156                    yield i, features157