Как включить метаданные в корпус NLTK для эффективной обработки - PullRequest
0 голосов
/ 07 октября 2018

У меня есть папка с txt-файлами, а также csv-файл с дополнительными данными, такими как категории, к которым принадлежит конкретный txt-документ, и исходный путь к исходному файлу (pdf).Имя файла Txt используется в качестве ключа в файле CSV.

Я создал базовый корпус nltk, но я хотел бы знать, является ли это наилучшим способом структурирования моих данных, если я хочу выполнить диапазонЗадачи NLP, такие как NER в корпусе, в конечном итоге идентифицируют сущности, которые встречаются в каждой категории, и могут ссылаться на исходные pdf-файлы, чтобы каждая сущность была видна в контексте.

Большинство примеров NLP (найти NER)переходить от корпуса к спискам объектов Python, но разве это не означает, что я потеряю связь с файлом TXT, который содержал объекты и все другие связанные данные?

Похоже, что категориальный корпус помогает сохранить категориюданные, но мой вопрос

Каков наилучший способ структурировать и работать с моим корпусом, чтобы избежать необходимости обходить туда-обратно - обрабатывать корпус, чтобы идентифицировать интересную информацию, выводимую в список, - снова искать корпус, чтобы получить файлы, содержащие интересующиеэлемент из списка - поиск CSV (данныекадр) по идентификатору файла, чтобы получить остальные метаданные

1 Ответ

0 голосов
/ 12 октября 2018

Одним из решений может быть использование подкласса 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
...