- У меня есть итератор, который выдает фрагменты текста.
- Я извлекаю существительные и сущности, сопоставляя каждый фрагмент текста из приведенного выше итератора с
[[entity_1, ..., entity_n], [noun_1, ..., noun_n]]
. - Затем я разделяю сущности и существительные, используя следующую функцию. Он возвращает несколько итераторов из одного итератора списков, так что 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)? Я надеюсь на асинхронный ответ, но, честно говоря, любые новые перспективы проблемы приветствуются!