[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-dev:00041] Re: 病名クラス



有家@松山記念病院です。

クラス Disease のための加算メソッド '+' を考えていて壁に当たりました。
病名および修飾語の正規化の壁です。
つまり

 右肘関節炎 + 慢性 + 自己免疫型

なんていう加算をおこなう際に、その結果を一意に決定するためには
病名の正規化の作業が不可欠です。
そしてそのためには病名修飾語の表記順序の決定が必要となります。

この、修飾語の表記順序には何か法則性がありそうなのですが単純ではありません。
これはmedisのファイルbyomei20.exe中にある修飾語テーブル(mdfy200.txt)の

 6)接続位置区分      24種類
 7)修飾語区分        8種類
 8)排他グループコード   20種類

等の完成を待たなければならないのかも知れません(spcfrm20.pdf)。

このファイル mdfy200.txt 中の、上記それぞれの区分にどのようなものがあるか
たとえば「接続位置区分」(第6フィールド)についてみるなら
以下の方法で列挙できます。
ここで行中の 6 を 7, 8 などにすれば以下同様です。

$ cat mdfy200.txt|nkf -e|cut -d "," -f 6|sed -e "s/\"//g"|sort -n|uniq

▼
視点を変えます。
もし「病名」をBNF記法で書くならば、<名詞> を自明の国語要素として

<修飾語> ::= <名詞> [ 性 | 型 | 状 | 度 | 的 | 期 | 後 | 位 | 側 | 部 ]
<修飾語> ::= <修飾語> | <修飾語> <修飾語>
<病名>   ::= <病名> | <修飾語> <病名> | <病名> <修飾語>

などということになるでしょうか。(漏れ漏れですね ..;)
この完全なものが書ければ、こっちのアプローチの方が早いのですが
そもそも自然言語をBNF記法で完全に書けるとは思いません..
でも、こういう努力も決して無駄ではなかろうと思います。

ということで、今日は全然進まず。

▼
eachメソッドがRubyのイテレータの本質であるように、splitメソッドは
病名形態素分析の本質であろうと考えます。
納得のいくsplitメソッドが書ければ、クラスDiseaseは半分完成したも同然でしょう。

そこでまた、今日も少し違ったsplitメソッドを書きました。
引数として渡された整数によって、異なった動作をするversionです。

$ dtest0522.rb 右鎖骨下静脈穿刺

> 右鎖骨下静脈穿刺
["右", "ミギ", "右", "名詞-一般"]
["鎖骨", "サコツ", "鎖骨", "名詞-一般"]
["下", "カ", "下", "名詞-接尾-一般"]
["静脈", "ジョウミャク", "静脈", "名詞-一般"]
["穿刺", "センシ", "穿刺", "名詞-一般"]


#!/usr/local/bin/ruby -Ke

require 'chasen.o'

class Disease < String
	# usage: self.split(mode)
	#
	# 0 : chasen の出力どおりの配列(入れ子)
	# 1 : 文節(形態素)のみの配列
	#
	def split(mode = 1)
		tree = Array.new
		list = Chasen.sparse(self).split("\n")
		if mode == 0 # array of infomation tree of disease name
			list.pop
			list.each{|i| tree.push i.split("\t")}
			tree
		elsif mode == 1 # array of segment list of disease name
			list.pop
			list.each{|i| i.gsub!(/\s.*/,"")}
			list
		end
	end
end

class Operation < Disease
end

ARGV.each{|arg|
	print "\n> #{arg}\n"
	Operation.new(arg).split(0).each{|i| p i}
}

__END__

# 蟷螂の斧というか、ドンキホーテというか ...

-- 
pba00250@xxxxxxxxx
yoariie@xxxxxxxxxxxxxxx
-------------------------
有家佳紀  Yoshinori Ariie