代码之家  ›  专栏  ›  技术社区  ›  mobcdi

如何将元数据整合到NLTK语料库中以实现高效处理

  •  1
  • mobcdi  · 技术社区  · 6 年前

    我有一个包含txt文件的文件夹,还有一个csv文件,其中包含其他数据,比如特定txt文档所属的类别和原始源文件(pdf)路径。Txt文件名用作CSV文件的密钥。

    我已经创建了一个基本的nltk语料库,但我想知道,如果这是我的数据结构的最佳方式,因为我想执行一系列的NLP任务,如对语料库的NER,并最终确定实体发生在每个类别,并能够链接回源pdf文件,使每个实体可以看到上下文。

    大多数NLP示例(findners)都是从语料库到python实体列表的,但这不意味着我会将关联放回包含实体和所有其他关联数据的txt文件吗?

    分类语料库似乎有助于保留分类数据,但我的问题是

    -再次搜索语料库以从列表中获取包含感兴趣元素的文件 -按文件id搜索CSV(数据帧)以获取其余的元数据

    1 回复  |  直到 6 年前
        1
  •  1
  •   howderek    6 年前

    一种解决方案是将 CorpusReader 对象,并在该子类的构造函数中,通过从每个文件创建dict将每个文件与其元数据相关联 fileid 到CSV中的行。这样,任何可以访问语料库的文件都可以访问元数据。

    例如:

    import nltk
    import csv
    from nltk.corpus.reader.api import CorpusReader
    
    class MetadataCSVCorpusReader(CorpusReader):
        def __init__(self, root, fileids, encoding='utf8', tagset=None):
            super().__init__(root, fileids, encoding='utf8', tagset=None)
            self._parsed_metadata = {}
            metadata = self.open('metadata.csv')
            reader = csv.DictReader(metadata)
            for row in reader:
                self._parsed_metadata[row['fileid']] = row
    
        @property
        def metadata(self):
            """
            Return the contents of the corpus metadata.csv file, if it exists.
            """
            return self.open("metadata.csv").read()
    
        @property
        def parsed_metadata(self):
            """
            Return the contents of the metadata.csv file as a dict
            """
            return self._parsed_metadata