Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
TCHIGUILAのトモ近況 | スラド
[go: Go Back, main page]



パスワードを忘れた? アカウント作成

TCHIGUILAさんのトモダチの日記。

みんなの日記はここから一覧を見ることができます。

13930906 journal

manmosの日記: いきなりUI変わった

日記 by manmos

リロードしたらログアウトされて、再ログインしたら、UI変わった。

で、サイドバーにメッセージとか出なくなったら設定しようとしても、何も変わらん。

13930433 journal
人工知能

yasuokaの日記: UDPipe APIのpython3ラッパー

日記 by yasuoka

昨日の日記を読みながら、LINDAT/CLARINのUDPipe API向けpython3ラッパー「UDPipe2UD.py」を書いてみた。Universal Dependenciesのid、form、lemma、upos、xpos、feats、head、deprel、deps、miscを全部格納するようにしたため、ちょっと長くなってしまった。

#! /usr/bin/python3 -i

class UDPipeEntry:
  def __init__(self,result):
    self.result=result
    if "\n" in result:
      t=[]
      for r in result.split("\n"):
        w=UDPipeEntry(r)
        if w.id>0:
          t.append(w)
      for i,w in enumerate(t):
        w.head=w if w.head==0 else t[i+w.head-w.id]
      self.tokens=t
    else:
      w=result.split("\t")
      try:
        w[0],w[6]=int(w[0]),int(w[6])
      except:
        w=[0]*10
      self.id,self.form,self.lemma,self.upos,self.xpos,self.feats,self.head,self.deprel,self.deps,self.misc=w if len(w)==10 else [0]*10
  def __repr__(self):
    return self.result
  def __getitem__(self,item):
    return self.tokens[item]
  def __len__(self):
    return len(self.tokens)
  def browse(self):
    import webbrowser,urllib.parse
    h="http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/kyodokenkyu/ud-kanbun/conllusvg/viewer.svg"
    webbrowser.open(h+"#"+urllib.parse.quote(str(self)))

class UDPipe2UD:
  def __init__(self,lang="ja",option="tokenizer&tagger&parser"):
    self.parseURL="http://lindat.mff.cuni.cz/services/udpipe/api/process?model="+lang+"&"+option
  def __call__(self,sentence):
    import urllib.request,urllib.parse,json
    with urllib.request.urlopen(self.parseURL+"&data="+urllib.parse.quote(sentence)) as r:
      q=r.read()
    return UDPipeEntry(json.loads(q)["result"])

上のプログラムを「UDPipe2UD.py」に保存したら、とりあえず「望遠鏡で泳ぐ彼女を見た」をUDPipe2UDで係り受け解析してみよう。

% python3 -i UDPipe2UD.py
>>> ja=UDPipe2UD(lang="ja")
>>> s=ja("望遠鏡で泳ぐ彼女を見た")
>>> s.browse()
>>> print(s)
# newdoc
# newpar
# sent_id = 1
# text = 望遠鏡で泳ぐ彼女を見た
1    望遠鏡    望遠鏡    NOUN    NN    _    3    obl    _    SpaceAfter=No
2    で    で    ADP    PS    _    1    case    _    SpaceAfter=No
3    泳ぐ    泳ぐ    VERB    VV    _    4    acl    _    SpaceAfter=No
4    彼女    彼女    PRON    NP    _    6    obj    _    SpaceAfter=No
5    を    を    ADP    PS    _    4    case    _    SpaceAfter=No
6    見    見る    VERB    VV    _    0    root    _    SpaceAfter=No
7    た    た    AUX    AV    _    6    aux    _    SpaceAfter=No

うまく行けば、こんな感じのブラウザが立ち上がってきて、↑のUniversal Dependenciesが出力される。本来「望遠鏡←obl─見」となるべきところ、この出力結果では「望遠鏡←obl─泳ぐ」となってしまっているが、現時点ではUDPipeの解析性能が足りない、ということだろう。

>>> print(s[0])
1    望遠鏡    望遠鏡    NOUN    NN    _    3    obl    _    SpaceAfter=No
>>> print(s[0].lemma)
望遠鏡
>>> print(s[2])
3    泳ぐ    泳ぐ    VERB    VV    _    4    acl    _    SpaceAfter=No
>>> print(s[2].upos)
VERB
>>> print(s[2].head)
4    彼女    彼女    PRON    NP    _    6    obj    _    SpaceAfter=No
>>> print(s[2].head.head)
6    見    見る    VERB    VV    _    0    root    _    SpaceAfter=No

なお、この「UDPipe2UD.py」は、他の言語にも対応している。英語なら

>>> en=UDPipe2UD(lang="en")
>>> s=en("He sat down with smiling face")
>>> s.browse()
>>> print(s)

で、古典中国語(漢文)なら

>>> lzh=UDPipe2UD(lang="lzh",option="tokenizer=presegmented&tagger&parser")
>>> s=lzh("不入虎穴不得虎子")
>>> s.browse()
>>> print(s)

で、それぞれ動作するはずである。ぜひ試してみてほしい。

13929635 journal
人工知能

yasuokaの日記: COTOHA APIのUniversal Dependencies向けpython3ラッパー

日記 by yasuoka

一昨昨日の日記で、私(安岡孝一)は書いた。

せめてCOTOHA APIも、ちゃんとUniversal Dependencies v2対応してくれないかなぁ。

『自然言語処理のためにMeCabを入れるのに疲れたのでCOTOHA APIを使った』を横目に見つつ、私なりにあれこれ考えてみて、COTOHA API構文解析v1のUniversal Dependencies v2向けpython3ラッパー「Cotoha2UD.py」を書いてみた。UPOSへの変換を、ある程度ちゃんとしようとしたら、思ったより長くなってしまった。

#! /usr/bin/python3 -i

class CotohaEntry:
  def __init__(self,response):
    import json
    self.response=response
    self.result=json.loads(response)["result"]
    self.tokens=[]
    for b in self.result:
      for w in b["tokens"]:
        w["xpos"]=w["pos"] if w["features"]==[] else w["pos"]+"["+",".join(w["features"])+"]"
        w["feats"]="_"
        w["head"]=w
        w["deprel"]="root"
        w["deps"]="_"
        w["misc"]="SpaceAfter=No"
        self.tokens.insert(w["id"],w)
    for w in self.tokens:
      if "dependency_labels" in w:
        for r in w["dependency_labels"]:
          t=self.tokens[r["token_id"]]
          t["head"]=w
          if r["label"]=="neg":
            t["deprel"]="aux"
            t["feats"]="Polarity=Neg"
          else:
            t["deprel"]=r["label"].replace("dobj","obj").replace("name","flat").replace("pass",":pass")
    p={ "名詞接尾辞":"NOUN", "冠名詞":"NOUN", "補助名詞":"NOUN",
        "動詞語幹": "VERB",
        "冠動詞":"ADV", "冠形容詞":"ADV", "連用詞":"ADV",
        "形容詞語幹":"ADJ",
        "連体詞":"DET",
        "接続詞":"CCONJ",
        "独立詞":"INTJ",
        "括弧":"PUNCT", "句点":"PUNCT", "読点":"PUNCT", "空白":"PUNCT",
        "Symbol":"SYM",
        "Number":"NUM" }
    for w in self.tokens:
      if w["pos"]=="名詞":
        w["upos"]="NOUN"
        if "代名詞" in w["xpos"] or "指示" in w["xpos"]:
          w["upos"]="PRON"
        if "固有" in w["xpos"]:
          w["upos"]="PROPN"
      else:
        w["upos"]=p[w["pos"]] if w["pos"] in p else "PART"
      if w["deprel"]=="case":
        w["upos"]="ADP"
      elif w["deprel"]=="cop" or w["deprel"].startswith("aux"):
        w["upos"]="AUX"
  def __repr__(self):
    return "".join("\t".join([str(t["id"]+1),t["form"],t["lemma"],t["upos"],t["xpos"],t["feats"],str(0 if t["head"] is t else t["head"]["id"]+1),t["deprel"],t["deps"],t["misc"]])+"\n" for t in self.tokens)
  def browse(self):
    import webbrowser,urllib.parse
    h="http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/kyodokenkyu/ud-kanbun/conllusvg/viewer.svg"
    webbrowser.open(h+"#"+urllib.parse.quote(str(self)))

class Cotoha2UD:
  def __init__(self,accessToken):
    self.parseURL="https://api.ce-cotoha.com/api/dev/nlp/v1/parse"
    self.accessToken=accessToken
  def __call__(self,sentence):
    import urllib.request,json
    h={ "Content-Type":"application/json;charset=UTF-8",
        "Authorization":"Bearer "+self.accessToken }
    d={ "sentence":sentence }
    u=urllib.request.Request(self.parseURL,json.dumps(d).encode(),h)
    with urllib.request.urlopen(u) as r:
      q=r.read()
    return CotohaEntry(q)

上のプログラムを「Cotoha2UD.py」に保存したら、ちょっと面倒くさい手順で「アクセストークン」を取得する。そこまでが出来たら、とりあえず「望遠鏡で泳ぐ彼女をみた」を、Cotoha2UDで係り受け解析してみよう。

% python3 -i Cotoha2UD.py
>>> ja=Cotoha2UD(accessToken="アクセストークン")
>>> s=ja("望遠鏡で泳ぐ彼女を見た")
>>> s.browse()
>>> print(s)
1    望遠鏡    望遠鏡    NOUN    名詞    _    3    nmod    _    SpaceAfter=No
2    で    で    ADP    格助詞[連用]    _    1    case    _    SpaceAfter=No
3    泳    泳ぐ    VERB    動詞語幹[G]    _    5    amod    _    SpaceAfter=No
4    ぐ    ぐ    AUX    動詞接尾辞[連体]    _    3    aux    _    SpaceAfter=No
5    彼女    彼女    PRON    名詞[代名詞]    _    7    obj    _    SpaceAfter=No
6    を    を    ADP    格助詞[連用]    _    5    case    _    SpaceAfter=No
7    見    見る    VERB    動詞語幹[A]    _    0    root    _    SpaceAfter=No
8    た    た    AUX    動詞接尾辞[終止]    _    7    aux    _    SpaceAfter=No

うまく行けば、こんな感じのブラウザが立ち上がってきて、↑のUniversal Dependenciesが出力される。本来「望遠鏡←obl─見」となるべきところ、この出力結果では「望遠鏡←nmod─泳」となってしまっているが、これはCOTOHA APIが解析をミスっているためなので、私としてはどうにもならない。うーん、COTOHA APIは「アクセストークン」が手間だし、1日1000回の制限があるし、やっぱりUDPipe APIの方が楽かなぁ…。

13928858 journal
人工知能

yasuokaの日記: UDPipeの古典中国語モデルがリリース

日記 by yasuoka

UDPipe 1.2が古典中国語(漢文)をサポートした、との御連絡をいただいた。Universal Dependencies 2.4の「四書」を学習させたモデルなのだが、「文切り」の性能が38.9%までしか上がらなかったので、あくまで「単語切り」「品詞付与」「係り受け」に限定した方がいいだろう、とのことである。LINDAT/CLARINのサーバAPIにも実装されたので、ちょっと使ってみよう。

% python3
>>> import urllib.parse,urllib.request,json
>>> url="http://lindat.mff.cuni.cz/services/udpipe/api/process?model=lzh&tokenizer=presegmented&tagger&parser"
>>> s="不入虎穴不得虎子"
>>> with urllib.request.urlopen(url+"&data="+urllib.parse.quote(s)) as r:
...   q=r.read()
...
>>> print(json.loads(q)["result"])
# newdoc
# newpar
# sent_id = 1
# text = 不入虎穴不得虎子
1    不    不    ADV    v,副詞,否定,無界    Polarity=Neg    2    advmod    _    SpaceAfter=No
2    入    入    VERB    v,動詞,行為,移動    _    6    advcl    _    SpaceAfter=No
3    虎    虎    NOUN    n,名詞,主体,動物    _    2    obj    _    SpaceAfter=No
4    穴    穴    NOUN    n,名詞,固定物,地形    Case=Loc    3    flat    _    SpaceAfter=No
5    不    不    ADV    v,副詞,否定,無界    Polarity=Neg    6    advmod    _    SpaceAfter=No
6    得    得    VERB    v,動詞,行為,得失    _    0    root    _    SpaceAfter=No
7    虎    虎    NOUN    n,名詞,主体,動物    _    6    obj    _    SpaceAfter=No
8    子    子    NOUN    n,名詞,人,関係    _    7    conj    _    SpaceAfter=No

SVGで可視化すると、こんな感じ。「入らずんば」のadvclは正解しているが、残念ながら「虎←nmod─穴」と「虎←nmod─子」が読めておらず、漢文における名詞の連続を、まだ、うまく理解できていないようだ。さて、どう鍛えていくのがいいかな…。

13927963 journal
人工知能

yasuokaの日記: NLP-Cubeで読む『吾輩は猫である』

日記 by yasuoka

AdobeのNLP-Cube 0.1.0.7がリリースされた、との御連絡をいただいた。とりあえず、pip3とpython3で、日本語モデル1.1も含め、インストール。

% pip3 install nlpcube==0.1.0.7
% python3
>>> from cube.api import Cube
>>> Cube().load("ja",1.1)
>>> quit()

今回のリリースの目玉は、Universal Dependenciesの出力回りの改善で、解析性能とかは改善されてない。試しに、言語処理100本ノック2015の『吾輩は猫である』から「ヴァイオリンを始める」文をNLP-Cubeで探してみよう。

% python3
>>> from cube.api import Cube
>>> ja=Cube()
>>> ja.load("ja")
>>> import urllib.request
>>> with urllib.request.urlopen("http://www.cl.ecei.tohoku.ac.jp/nlp100/data/neko.txt") as r:
...   q=r.read()
...
>>> u=ja(q.decode("utf-8"))
>>> for s in u:
...   f=False
...   for w in s:
...     if w.lemma=="ヴァイオリン" and w.label=="obj":
...       if s[w.head-1].lemma=="始める":
...         f=True
...   if f:
...     print("".join(str(w)+"\n" for w in s))
...
1    「    「    PUNCT    _    _    2    punct    _    SpaceAfter=No
2    君    君    PRON    _    _    12    nsubj    _    SpaceAfter=No
3    は    は    ADP    _    _    2    case    _    SpaceAfter=No
4    ヴァイオリン    ヴァイオリン    NOUN    _    _    9    obj    _    SpaceAfter=No
5    を    を    ADP    _    _    4    case    _    SpaceAfter=No
6    いつ    いつ    NOUN    _    _    7    compound    _    SpaceAfter=No
7    頃    頃    NOUN    _    _    9    obl    _    SpaceAfter=No
8    から    から    ADP    _    _    7    case    _    SpaceAfter=No
9    始め    始める    VERB    _    _    12    acl    _    SpaceAfter=No
10    た    た    AUX    _    _    9    aux    _    SpaceAfter=No
11    の    の    PART    _    _    9    case    _    SpaceAfter=No
12    かい    かい    AUX    _    _    0    root    _    SpaceAfter=No
13    。    。    PUNCT    _    _    12    punct    _    SpaceAfter=No

SVGで可視化するとこんな感じ。「君←nsubj」の係り受けリンクが「始め」じゃなくて「かい」から出ているのはイラっとくるものの、「ヴァイオリンを始める」がうまく検索できている。ただ、私(安岡孝一)の見る限り、日本語の解析性能においては、現状ではNLP-CubeよりGiNZAの方が上である。このあたり、「望遠鏡で泳ぐ彼女を見た」などを解析して、実際に確かめてみてほしい。

13927250 journal
宇宙

manmosの日記: 暗黒物質が存在しないと考えられる銀河、実は計測の間違い

日記 by manmos

去年、暗黒物質が存在しないと考えられる銀河が発見され、銀河の生成に関する議論が上がった。
暗黒物質自体が銀河生成に関わるとの説明もあるので、その銀河の生成に関する新しい理論も考えられていた。

しかし、実はその銀河 NGC 1052–DF2 は6500万光年先と測定されていたが、別の独立した方法で計測したところによると、実際はそれより近く4200万光年先と言う結果が出た。

その結果からNGC 1052–DF2を観測するとやはり暗黒物質がある銀河との特徴と同じとなったようだ。

やはり、世の中はダークな物にまみれいるようだ。

https://academic.oup.com/mnras/article-abstract/486/1/1192/5380810
https://phys.org/news/2019-06-mystery-galaxy-dark.html
https://gigazine.net/news/20190605-mystery-galaxy-dark-matter/

関連ストーリー
https://science.srad.jp/story/18/04/02/0659218/

13926917 journal
人工知能

yasuokaの日記: 「望遠鏡で泳ぐ彼女を見た」の係り受けをCOTOHA APIで解析する

日記 by yasuoka

COTOHA APIの係り受け解析がUniversal Dependencies準拠だと聞いたので、試しに使ってみることにした。「アクセストークン」の取得がかなり面倒くさいのだが、そこまで行けば、あとはcurl一発で「望遠鏡で泳ぐ彼女を見た」を文法解析できる。

% curl -X POST -H 'Content-Type:application/json;charset=UTF-8' -H 'Authorization:Bearer アクセストークン' -d '{"sentence":"望遠鏡で泳ぐ彼女を見た"}' https://api.ce-cotoha.com/api/dev/nlp/v1/parse
{
  "result" : [ {
    "chunk_info" : {
      "id" : 0,
      "head" : 1,
      "dep" : "D",
      "chunk_head" : 0,
      "chunk_func" : 1,
      "links" : [ ]
    },
    "tokens" : [ {
      "id" : 0,
      "form" : "望遠鏡",
      "kana" : "ボウエンキョウ",
      "lemma" : "望遠鏡",
      "pos" : "名詞",
      "features" : [ ],
      "dependency_labels" : [ {
        "token_id" : 1,
        "label" : "case"
      } ],
      "attributes" : { }
    }, {
      "id" : 1,
      "form" : "で",
      "kana" : "デ",
      "lemma" : "で",
      "pos" : "格助詞",
      "features" : [ "連用" ],
      "attributes" : { }
    } ]
  }, {
    "chunk_info" : {
      "id" : 1,
      "head" : 2,
      "dep" : "D",
      "chunk_head" : 0,
      "chunk_func" : 1,
      "links" : [ {
        "link" : 0,
        "label" : "condition"
      } ]
    },
    "tokens" : [ {
      "id" : 2,
      "form" : "泳",
      "kana" : "オヨ",
      "lemma" : "泳ぐ",
      "pos" : "動詞語幹",
      "features" : [ "G" ],
      "dependency_labels" : [ {
        "token_id" : 0,
        "label" : "nmod"
      }, {
        "token_id" : 3,
        "label" : "aux"
      } ],
      "attributes" : { }
    }, {
      "id" : 3,
      "form" : "ぐ",
      "kana" : "グ",
      "lemma" : "ぐ",
      "pos" : "動詞接尾辞",
      "features" : [ "連体" ],
      "attributes" : { }
    } ]
  }, {
    "chunk_info" : {
      "id" : 2,
      "head" : 3,
      "dep" : "D",
      "chunk_head" : 0,
      "chunk_func" : 1,
      "links" : [ {
        "link" : 1,
        "label" : "adjectivals"
      } ]
    },
    "tokens" : [ {
      "id" : 4,
      "form" : "彼女",
      "kana" : "カノジョ",
      "lemma" : "彼女",
      "pos" : "名詞",
      "features" : [ "代名詞" ],
      "dependency_labels" : [ {
        "token_id" : 2,
        "label" : "amod"
      }, {
        "token_id" : 5,
        "label" : "case"
      } ],
      "attributes" : { }
    }, {
      "id" : 5,
      "form" : "を",
      "kana" : "ヲ",
      "lemma" : "を",
      "pos" : "格助詞",
      "features" : [ "連用" ],
      "attributes" : { }
    } ]
  }, {
    "chunk_info" : {
      "id" : 3,
      "head" : -1,
      "dep" : "O",
      "chunk_head" : 0,
      "chunk_func" : 1,
      "links" : [ {
        "link" : 2,
        "label" : "object"
      } ],
      "predicate" : [ "past" ]
    },
    "tokens" : [ {
      "id" : 6,
      "form" : "見",
      "kana" : "ミ",
      "lemma" : "見る",
      "pos" : "動詞語幹",
      "features" : [ "A" ],
      "dependency_labels" : [ {
        "token_id" : 4,
        "label" : "dobj"
      }, {
        "token_id" : 7,
        "label" : "aux"
      } ],
      "attributes" : { }
    }, {
      "id" : 7,
      "form" : "た",
      "kana" : "タ",
      "lemma" : "た",
      "pos" : "動詞接尾辞",
      "features" : [ "終止" ],
      "attributes" : { }
    } ]
  } ],
  "status" : 0,
  "message" : ""
}

ざっと見たところ、rootがどこに刺さっているのか明示されていないし、品詞がかなり独特である。正直なところ、これではUniversal Dependencies準拠とは言い難い。とりあえずGraphviz Onlineで、単語間の係り受けを可視化してみたところ、こんな感じ。本来「望遠鏡←obl─見」であるべきところが、残念ながら「望遠鏡←nmod─泳」と解析されてしまっていて、かなり悲しい。

これだと、UDPipe APIの方が「アクセストークン」も不要で使いやすいし、解析結果も上だったりする。せめてCOTOHA APIも、ちゃんとUniversal Dependencies v2対応してくれないかなぁ。

13925829 journal
バグ

yasuokaの日記: 「望遠鏡で泳ぐ彼女を見た」の係り受け構造をGraphviz 2.38で可視化する

日記 by yasuoka

昨日の日記で書いたDOT言語だが、私(安岡孝一)の手元のGraphviz 2.38にはバグがあるらしく、shape=recordの中の日本語がうまく表示されない。ちなみに、このバグには「回避策」があって、日本語の前後に空白(U+0020)を入れれば大丈夫らしい。

digraph G{
  w1[shape=record,label="{NOUN| 望遠鏡 }"];
  w2[shape=record,label="{ADP| で }"];
  w3[shape=record,label="{VERB| 泳ぐ }"];
  w4[shape=record,label="{PRON| 彼女 }"];
  w5[shape=record,label="{ADP| を }"];
  w6[shape=record,label="{VERB| 見 }"];
  w7[shape=record,label="{AUX| た }"];

  r1[label="obl"];
  r2[label="case"];
  r3[label="acl"];
  r4[label="obj"];
  r5[label="case"];
  r6[label="root"];
  r7[label="aux"];

  w6->r1[dir=none];r1->w1;
  w1->r2[dir=none];r2->w2;
  w4->r3[dir=none];r3->w3;
  w6->r4[dir=none];r4->w4;
  w4->r5[dir=none];r5->w5;
  r6->w6;
  w6->r7[dir=none];r7->w7;

  {rank=source;r6}
  {rank=sink;w1;w2;w3;w4;w5;w6;w7}
  r4->r5->w6[style=invis];
  r1->r4->r2->w3[style=invis];
}

かなりバッドノウハウな気もするのだが、「dot -V」が2.38以下の場合は、試してみるのもいいと思う。

13924829 journal
日記

yasuokaの日記: 「望遠鏡で泳ぐ彼女を見た」の係り受け構造をGraphvizで可視化する 1

日記 by yasuoka

『GraphvizでStanfordNLPの係り受け構造を描画』に触発されて、私(安岡孝一)もGraphvizを触ってみた。例として「望遠鏡で泳ぐ彼女を見た」

1    望遠鏡    望遠鏡    NOUN    _    _    6    obl    _    SpaceAfter=No
2    で    で    ADP    _    _    1    case    _    SpaceAfter=No
3    泳ぐ    泳ぐ    VERB    _    _    4    acl    _    SpaceAfter=No
4    彼女    彼女    PRON    _    _    6    obj    _    SpaceAfter=No
5    を    を    ADP    _    _    4    case    _    SpaceAfter=No
6    見    見る    VERB    _    _    0    root    _    SpaceAfter=No
7    た    た    AUX    _    _    6    aux    _    SpaceAfter=No

の係り受け構造を、Graphvizで可視化してみたいと思う。GraphvizではDOTという描画言語を使うらしいので、↑のUniversal DependenciesをDOTで書き直せばいいはずだ。

digraph G{
  w1[shape=record,label="{NOUN|望遠鏡}"];
  w2[shape=record,label="{ADP|で}"];
  w3[shape=record,label="{VERB|泳ぐ}"];
  w4[shape=record,label="{PRON|彼女}"];
  w5[shape=record,label="{ADP|を}"];
  w6[shape=record,label="{VERB|見}"];
  w7[shape=record,label="{AUX|た}"];

  r1[label="obl"];
  r2[label="case"];
  r3[label="acl"];
  r4[label="obj"];
  r5[label="case"];
  r6[label="root"];
  r7[label="aux"];

  w6->r1[dir=none];r1->w1;
  w1->r2[dir=none];r2->w2;
  w4->r3[dir=none];r3->w3;
  w6->r4[dir=none];r4->w4;
  w4->r5[dir=none];r5->w5;
  r6->w6;
  w6->r7[dir=none];r7->w7;

  {rank=source;r6}
  {rank=sink;w1;w2;w3;w4;w5;w6;w7}
  r4->r5->w6[style=invis];
  r1->r4->r2->w3[style=invis];
}

Graphviz Onlineで見ると、こんな感じ。各単語をw1w7のノードで、各係り受けタグをr1r7のノードで表して、それらに係り受け関係の枝を付けたものである。ただ、それだけだと、ノードが勝手気ままに並んでしまう(こんな感じ)ので、rootノードをrank=sourceに、単語ノードをrank=sinkに並べた上で、見えない枝を5本ほど張って、各ノードをうまく整列させている。あとは「dot -T png ファイル.dot -o ファイル.png」なり何なりで、画像ファイルが得られるはずだ。

こうして見ると、以前、私が作った「SVGによるUniversal Dependencies可視化ツール」に遜色ないようだ。ただ、Graphvizでの見えない枝を、どうシステマティックに張るのかは、一工夫必要だろう。

13922591 journal
政府

yasuokaの日記: 戸籍法改正がデジタルファースト法とともに官報告示 92

日記 by yasuoka

本日(5月31日)付の官報号外第23号で、戸籍法の一部を改正する法律が告示された。デジタルファースト法による住民基本台帳法改正とマイナンバー法改正が、一体となっておこなわれたものなので、改正が非常に多岐に渡るのだが、私(安岡孝一)なりに勘所をまとめておこうと思う。

戸籍法改正の目玉は、これまでは紙の「帳簿」が戸籍の正本だった(第七条)ものが、今後はデジタルデータが戸籍の正本となる、という点である。第百十八条の改正と附則第三条の経過措置によって、もう、紙の戸籍には戻れなくなる。また、第百二十条の二を新設することで、これまで本籍地でしか取得できなかった「戸籍謄本」(戸籍全部事項証明書)が、全国どこの市区町村においても「戸籍電子証明書」の形で取得できるようになる。

住民基本台帳法改正の目玉は「戸籍の附票」のデジタルネットワーク化である。第三十条の四十一~第三十条の四十四の十二を新設することで、住民基本台帳ネットワークと同様の、戸籍の附票ネットワークを全市区町村と全都道府県とJ-LIS(地方公共団体情報システム機構)の間で構築する。戸籍の附票ネットワーク上を流れるのは、第十七条(改正後)の以下の7つの項目である。

第十七条 戸籍の附票には、次に掲げる事項について記載(前条第二項の規定により磁気ディスクをもつて調製する戸籍の附票にあつては、記録。以下同じ。)をする。
 戸籍の表示
 氏名
 住所(国外に転出をする旨の第二十四条の規定による届出(次号及び第七号において「国外転出届」という。)をしたことによりいずれの市町村においても住民基本台帳に記録されていない者(以下「国外転出者」という。)にあつては、国外転出者である旨)
 住所を定めた年月日(国外転出者にあつては、その国外転出届に記載された転出の予定年月日)
 出生の年月日
 男女の別
 住民票に記載された住民票コード(国外転出者にあつては、その国外転出届をしたことにより消除された住民票に記載されていた住民票コード。第三十条の三十七及び第三十条の三十八において同じ。)

マイナンバー法改正の目玉は、国外転出者にもマイナンバー(個人番号)を付与する、という点である。住民票コードとマイナンバーの間の紐付は、現状は住民票(および住民基本台帳ネットワーク)によっておこなわれているが、今後はこれに、戸籍の附票ネットワークが加わる。この際、通知カードは廃止され、本人へのマイナンバーの通知は、別の方法(場合によっては紙以外の方法)でおこなわれることになる。一方、第二十一条の二および第四十五条の二を新設(ただし一部はその後に第九条第三項へ移動)することで、戸籍の「副本」と情報提供用個人識別符号(いわゆる機関別符号)が紐付けられる。つまり、戸籍(つまりは日本国民全部)とマイナンバーが直接に結び付けられないよう法律上は書かれているものの、実際には、戸籍の附票や住民基本台帳ネットワークを経由して、戸籍とマイナンバーが紐付けられることになる。

なお、戸籍法改正の施行日は6月19日だが、他の法律改正の施行日は年末以降になりそうである。また、全システムが稼働するには、実際には2年程度かかりそうである。

typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...