ジオマーリン

仕様を公開してアドバイスを受けながら geomerlin.com を構築していくスタイル。このシステムではデータサイエンスと人工知能技術により地政学リスクを算出しています。

Stanford Corenlp をPythonで使う2(実用的なコーディング、便利な関数の作成)

 前回(Stanford Corenlp をPythonで使う1)ではソフトの紹介を行いましたが、続いて実際に僕が使い続けている際に、どういうコードを書けば良いのかを書かせてもらいます。

 

 まず、重要な点として

 1:出力がディクショナリという変更可能(ミュータブル)なオブジェクトを中心に扱っているため、その利点を活かすべきだということ

 2:出力されたデータはあまりにもネストが多くて扱いにくいということ

 

 故に

 coref,dependencyのデータを単語データ(sentence["words"]の要素)にあるディクショナリに格納しネストを減らすべき

 と言う結論に達します。全部単語データにぶち込んで分かりやすくしておき、後々のコーディングに備えましょう。

 まずcorefから。

 

def net_coref(all_data):

   for coref in all_data["coref"]:

       for item in coref:

           "各corefのリストは最後の要素が、最初に文で登場した具体的な表現である"

   "故に最後の要素を参照先として参照元の単語データに格納する"

           gov = item[-1] #これが最後のデータ

 

   "最後以外のデータを順に処理する"

           for index in range(len(item))[:-1]:

               i  = item[index]

               start = i[-2] #始まりの場所

               end = i[-1] #終わりの場所

        "i[1]は「何文目か」、i[-1]は「何語目から始まるか」,i[-2]は「終わるか」"

               for word in all_data['sentences'][i[1]]["words"][start:end]:

                   word[1]['coref'] = tuple(gov)


##続き編集中