2017-01-12 3 views
3

Я не могу понять, как получить доступ к столбцам комментариев в моих файлах данных, которые находятся в CNTKTextFormat. Например, в этом tutorial, вы следующее:Как я могу получить доступ к столбцам комментариев при использовании чтения CNTKTextFormat?

19 |S0 178:1 |# BOS  |S1 14:1 |# flight |S2 128:1 |# O 
19 |S0 770:1 |# show       |S2 128:1 |# O 
19 |S0 429:1 |# flights      |S2 128:1 |# O 

Как я могу получить доступ к комментировали данные?

ответ

3

Если экземпляр ваш источник minibatch так:

data_source = (CTFDeserializer("mydata.ctf", ...), randomize=False, ...) 

вы можете открыть входной файл, который вы передаёте CTFDeserializer с Python и разобрать его minibatch по minibatch. Это очень важно, чтобы установить randomize=False, иначе читатель и ваш синтаксический разбор вручную не будут синхронизированы. Например, если объект файла имеет значение stream, а размер мини-бара - batch_size, следующий код будет печатать столбцы с комментариями каждой последовательности в качестве словаря, сопоставляющего имя предыдущего столбца (S0, S1 или S0) с последовательностью строк, найденных в столбцах комментариев.

из itertools импорта GroupBy из коллекций импорта defaultdict

stream = open("mydata.ctf") 

lines = [stream.readline() for i in range(batch_size)] 
for seqid, sequence in groupby(lines, lambda s:s.split()[0]): 
    mapping = defaultdict(list) 
    for sample in sequence: 
     parts = sample.split('|') 
     unused = [mapping[parts[i-1].split(' ')[0].strip()].append(p.strip()) for i, p in enumerate(parts) if p.startswith('#')] 
    print(seqid, mapping) 

Для приведенного выше примера ввода он производит:

19 defaultdict(<class 'list'>, {'S0': ['# BOS', '# show', '# flights'], 'S2': ['# O', '# O', '# O'], 'S1': ['# flight']}) 

Этот пример будет работать для вышеприведенного формата входного сигнала. Если ваш фактический формат отличается, вам придется адаптировать его для своих целей.

 Смежные вопросы

  • Нет связанных вопросов^_^