Преобразовать список строковых представлений предложений в словарный набор - PullRequest
0 голосов
/ 07 мая 2018

У меня есть список строковых представлений предложений, который выглядит примерно так:

original_format = ["This is a question", "This is another question", "And one more too"]

Я хочу преобразовать этот список в набор уникальных слов в моем корпусе. Учитывая приведенный выше список, результат будет выглядеть примерно так:

{'And', 'This', 'a', 'another', 'is', 'more', 'one', 'question', 'too'}

Я нашел способ сделать это, но на его запуск уходит очень много времени. Меня интересует более эффективный способ преобразования из одного формата в другой (тем более что мой фактический набор данных содержит> 200 тыс. Предложений).

К вашему сведению, я сейчас создаю пустой набор для вокаба, а затем перебираю каждое предложение (разделенное пробелами) и объединяюсь с набором вокаба. Используя переменную original_format , как определено выше, это выглядит так:

vocab = set()
for q in original_format:
    vocab = vocab.union(set(q.split(' ')))

Можете ли вы помочь мне выполнить это преобразование более эффективно?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете использовать itertools.chain с set. Это позволяет избежать вложенных циклов for и конструкции list.

from itertools import chain

original_format = ["This is a question", "This is another question", "And one more too"]

res = set(chain.from_iterable(i.split() for i in original_format))

print(res)

{'And', 'This', 'a', 'another', 'is', 'more', 'one', 'question', 'too'}

Или для действительно функционального подхода:

from itertools import chain
from operator import methodcaller

res = set(chain.from_iterable(map(methodcaller('split'), original_format)))
0 голосов
/ 07 мая 2018

Используя простое понимание набора:

{j for i in original_format for j in i.split()}

Выход:

{'too', 'is', 'This', 'And', 'question', 'another', 'more', 'one', 'a'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...