witchの日記: 「水無月」 進捗……ないけど元気です
いや、全然ないってわけじゃないけど、目に見えるものがない。
いや、全然ないってわけじゃないけど、目に見えるものがない。
継続的な向上により品質を保証する: 医療記録の専門家にとっての新たな方向性
1991年の記事。特に内容はない…
医療情報管理: 高品質のデータを通じてよりよいケアを
1992年の記事。内容がないよう…
研究レビュー: 医療記録専門家の役割の差
1992年の記事。実際の仕事とあるべき仕事の差の判別に最も関わる変数は現在の地位で、学歴は一番関わりがない。
イノベーションと研究レビュー: パーソナリティ分析を用いた病院医療記録マネージャの洞察
1991年の記事。調査対象となったマネージャの75%以上は300床以下の施設に所属している。特性は小中規模の部門のスーパバイザと一貫している。最もユニークなのは大規模施設におけるNPマネージャの多さだった(つまりはMBTIってことか?)。他のNも多い一方でPに関してはそれほどでもない。
午後5時10分まで仕事。
患者中心の病院における経営技術士の役割
1992年の記事。特に内容はないよう
カルチャーショック: TQMへの道
1992年の記事。Crawford Long Hospitalの事例。
大小の成功から品質文化を築く
1992年の記事。Baptist Medical Center in ColumbiaのTQM事例。
TQM: 医療記録部門の向上のための実施戦略
1991年の記事。内容はないよう…
事情通曰く、Apache Hadoopは役立たず
スラド内検索でも2015年の言及が最後だが、それがいまどきのナウいエンジニアがアクティブユーザにいないせいか、事情通の発言通り顧客を不幸にするミドルウェアだからかはよく分からない
昨日の日記を読みながら、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)
で、それぞれ動作するはずである。ぜひ試してみてほしい。
業務改革の概要および薬剤師への含意
1994年の記事。特に内容はないよう
正しい改革の戦略を選ぶ。急がば回れ
1993年の記事。遅い、全員参加のプロセスの方がうまくいくとのこと。そらそうやろ
ユニットを患者中心ケアに切り替える
1993年の記事。St. Vincent Hospitals and Health ServicesにおけるCare2001実装の事例。1990年にパイロットプログラムのSeton Unitを導入している。最初高かった満足度はその後やや下落したため改良が必要だった。
患者中心のケアでスマートに働く
1992年の記事。Lee Memorial HospitalとNorthside Hospitalの事例。
Parkviewの品質向上
1992年の記事。Parkview Episcopal Medical CenterのCQI事例。
Lee Memorial Hospital、病院全体の変化の基盤となる「焦点ケアセンター」の1例目に肯定的な初期結果を得る
1992年の記事。前後篇の後篇らしいが内容はない
一昨昨日の日記で、私(安岡孝一)は書いた。
せめて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の方が楽かなぁ…。
患者中心のケア: 結論は未だ出ず
1994年の記事。内容はないよう
患者中心のワークデザイン: 病院と薬剤部の再編
1994年の記事。MultiCare Medical Centerの事例。
患者中心のケアとファーマシューティカルケア: 組織の中でどう協働するか
1994年の記事。特に内容はないよう…
病院の患者中心ケアへの移行における薬剤部の関わり
1994年の記事。内容はないよう…
午後5時30分まで仕事。
私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike