yasuokaの日記: BaiduのDDParserをdeplacyに繫ぐには
ネットサーフィンしていたところ、DDParserという係り受け解析ツールが公開されているのを見つけたので、Google Colaboratoryで動かしてみた。
!pip install ddparser
from ddparser import DDParser
ddp=DDParser(use_pos=True)
doc=ddp.parse(["我把这本书看完了","我把這本書看完了","吾既讀是書也"])
print(doc)
「我把这本书看完了」「我把這本書看完了」「吾既讀是書也」の3つの文を解析してみたところ、私(安岡孝一)の手元では以下の結果になった。
[{'word': ['我', '把', '这本书', '看完', '了'], 'postag': ['r', 'p', 'r', 'v', 'xc'], 'head': [4, 4, 2, 0, 4], 'deprel': ['SBV', 'POB', 'POB', 'HED', 'MT']}, {'word': ['我', '把', '這本書', '看完', '了'], 'postag': ['r', 'p', 'r', 'v', 'xc'], 'head': [4, 4, 2, 0, 4], 'deprel': ['SBV', 'POB', 'POB', 'HED', 'MT']}, {'word': ['吾', '既', '讀', '是', '書', '也'], 'postag': ['r', 'c', 'v', 'v', 'n', 'd'], 'head': [3, 3, 0, 3, 4, 4], 'deprel': ['SBV', 'ADV', 'HED', 'VOB', 'VOB', 'MT']}]
うーむ、フォーマットも品詞体系も独特で、かなり読みにくい。無理矢理deplacyに繫いでみよう。
!pip install deplacy ddparser
from ddparser import DDParser
ddp=DDParser(use_pos=True)
nlp=lambda t:"".join(["\n".join(["\t".join([str(i+1),w,"_",p,p,"_",str(h),d,"_","SpaceAfter=No"]) for i,(w,p,h,d) in enumerate(zip(s["word"],s["postag"],s["head"],s["deprel"]))])+"\n\n" for s in ddp.parse(t)])
doc=nlp(["我把这本书看完了","我把這本書看完了","吾既讀是書也"])
import deplacy
deplacy.render(doc)
deplacy.serve(doc,port=None)
私の手元では、以下の結果と、こんな感じのSVGが得られた。
我 r <════╗ SBV
把 p ═╗<╗ ║ POB
这本书 r <╝ ║ ║ POB
看完 v ═╗═╝═╝ HED
了 xc <╝ MT
我 r <════╗ SBV
把 p ═╗<╗ ║ POB
這本書 r <╝ ║ ║ POB
看完 v ═╗═╝═╝ HED
了 xc <╝ MT
吾 r <════════╗ SBV
既 c <══════╗ ║ ADV
讀 v ═════╗═╝═╝ HED
是 v ═╗═╗<╝ VOB
書 n <╝ ║ VOB
也 d <══╝ MT
残念ながら「吾既讀是書也」は、読めていないようだ。品詞の「r」は、品詞一覧を見る限り代名詞だと思うのだが、「这本书」や「這本書」が一語になっていて「r」なのが、よく解らない。また、POBがどういう係り受けなのか、「看完」=POB⇒「把」=POB⇒「这本书」からは、イマイチ理解できない。ふーむ、まあ、現時点ではStanzaを使っておいた方がいいかな。
BaiduのDDParserをdeplacyに繫ぐには More ログイン