1

私は次のことをしなければならないjsonファイルを持っています:

  1. Syntaxnet を使用して、json の「テキスト」フィールドのみを実行します。
  2. Syntaxnet の出力から、次のような新しい json フィールドを作成します。text_syntaxnet = [{'word' = <WORD1>, 'position = <word_position>, 'pos_tag' = <POS_TAG>}, {...........}]
  3. この新しい json フィールドを、入力として入ってきた元の json に追加します。

Pig Streaming を使用してこれを行っています。parse.py入力データを次の内容の関数にストリーミングしたいと思います。

import sys
import re
import subprocess
import json


def create_new_json_field(tags_list):
    word_tags = {}
    new_json_field = []
    for line in tags_list:
        line = line.strip()
        if not line:
            continue
        else:
            words = line.split()
            word_tags['word'] = words[1]
            word_tags['position'] = words[0]
            word_tags['pos_tag'] = words[4]
            new_json_field.append(word_tags.copy())
    return new_json_field


def main(argv):
    try:
        for line in sys.stdin:
            json_original = json.loads(line)
            print json_original
            tags = subprocess.check_output('./parse.sh %s' % line, shell=True)
            tags_list = tags.split('\n')
            new_json_field = create_new_json_field(tags_list)
            result = json_original['text_syntaxnet'] = new_json_field
            print new_json_field
            print result
    except Exception as e:
        sys.stdout.write(str(e))

main(sys.argv)

の内容は次のparse.shとおりです。

#!/bin/sh
cd ........../models/syntaxnet
jq --raw-output '.["text"]' | syntaxnet/demo.sh

parse.sh を呼び出すこのコードは機能しません。すべての作品を休ませます。コマンドの構文なのか、環境の問題なのかわかりません。この問題のデバッグを手伝ってください。

注: で実行しない場合、サブプロセス呼び出しは機能for line in sys.stdinparse.pyます。しかし、行ごとに解析してからjsonオブジェクトを作成したいので、やりたいです。

ありがとう!

4

0 に答える 0