Как я могу использовать несколько итераторов в порядке очереди в Python3? - PullRequest
0 голосов
/ 22 марта 2020
  1. У меня есть итератор, который выдает фрагменты текста.
  2. Я извлекаю существительные и сущности, сопоставляя каждый фрагмент текста из приведенного выше итератора с [[entity_1, ..., entity_n], [noun_1, ..., noun_n]].
  3. Затем я разделяю сущности и существительные, используя следующую функцию. Он возвращает несколько итераторов из одного итератора списков, так что 1-й итератор возвращает первое значение из каждого из списков, второй итератор возвращает второе значение из списка, et c.
def partition(iterable, subset=None):
    # Peek at the data
    peek = next(iterable)
    # Prepend peek
    iterable = itertools.chain([peek], iterable)
    # Get length of peek
    n = len(peek)
    if subset is None:
        subset = range(n)
    # Flatten
    iterable = itertools.chain.from_iterable(iterable)
    # Clone generator n times
    iterable = itertools.tee(iterable, n)
    # Return n seperate iterators
    return [itertools.islice(it, i, sys.maxsize, n) for i, it in zip(subset, iterable)]

Затем я выравниваю сущности и существительные, используя itertools.chain.from_iterable.

Как я могу использовать каждый из итераторов для сущностей и существительных в тандеме без блокировки одного из генераторов? Например, если 5 текстов и 4 существительных извлечены для текста 1, то как я могу обработать 5-й объект, не дожидаясь появления 5-го существительного в генераторе (первого существительного из текста 2)? Я надеюсь на асинхронный ответ, но, честно говоря, любые новые перспективы проблемы приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...