首页 > 解决方案 > 如何将元数据合并到 NLTK 语料库中以进行高效处理

问题描述

我有一个 txt 文件文件夹和一个 csv 文件,其中包含特定 txt 文档所属的类别和原始源文件 (pdf) 路径等附加数据。Txt 文件名用作 CSV 文件的键。

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

大多数 NLP 示例(查找 NER)从语料库到实体的 python 列表,但这是否意味着我将失去与包含实体和所有其他相关数据的 txt 文件的关联?

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

什么是构建和使用我的语料库的最佳方法,以避免必须在之间往返 - 处理语料库以识别输出到列表的有趣信息 - 再次搜索语料库以获取包含列表中感兴趣元素的文件 - 搜索 CSV(数据框)通过文件 id 获取其余的元数据

标签: pythondata-structuresnlpnltk

解决方案


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

例如:

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

推荐阅读