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, ...) 

あなたは、あなたは、PythonでCTFDeserializerに渡された入力ファイルを開き、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']}) 

この例では、上記入力フォーマットのために動作します。実際のフォーマットが異なる場合、これをあなたの目的に合わせて調整しなければなりません。

関連する問題