2017-01-12 2 views
3

Ich kann nicht herausfinden, wie auf die Kommentarspalten in meinen Datendateien, die sich in CNTKTextFormat befinden, zugegriffen wird. Zum Beispiel in diesem tutorial, haben Sie die folgenden Schritte aus:Wie kann ich auf die Kommentarspalten zugreifen, wenn ich den CNTKTextFormat-Leser verwende?

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 

Wie kann ich die kommentierten Daten zugreifen?

Antwort

3

Wenn Sie Ihre mini Quelle wie folgt instanziiert:

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

Sie können dann die Eingabedatei öffnen Sie CTFDeserializer mit Python vergangen und es analysieren mini durch mini. Es ist sehr wichtig, zu randomize=False setzen sonst wird der Leser und Ihre manuelle Analyse unten nicht synchron sein. Wenn das Dateiobjekt beispielsweise stream lautet und die Minibatch-Größe batch_size ist, wird der folgende Code die kommentierten Spalten jeder Sequenz als ein Wörterbuch drucken, das den vorhergehenden Spaltennamen (S0, S1 oder S0) der Zeichenfolge in den Kommentarspalten zuordnet.

von itertools Import groupby aus Sammlungen importieren 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) 

Für die Eingabe obigen Beispiels es produziert:

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

Dieses Beispiel für das obige Eingabeformat funktioniert. Wenn Ihr tatsächliches Format anders ist, müssen Sie dies für Ihre Zwecke anpassen.

Verwandte Themen