制約付き解析


In [1]:
from natto import MeCab

形態素境界制約の指定 (boundary constraints)

MeCab 制約付き解析機能の形態素境界制約は、形態素の境界を指定してそれを一つの語として扱って解析する機能です。

たとえば、特定の正規表現を利用してその条件に満たす形態素を一つの形態素として解析をしたい場合に boundary_constraint を指定して制約をつけることができます。下は文中の証券コードを抽出して解析を行う例です。

※ただし抽出された形態素は未知語として扱われ、status1 となる。


In [2]:
text1 = """\
証券コードは4桁の銘柄識別コードです。
たとえば、7777 です。
あるいは  7777 JP や 7777.Tというのもあります。
また「7777JP」のような全角文字を使う表し方もあるかも知れません。
\
"""

# 簡単な証券コードの正規表現
patt = "[0-9\uFF10-\uFF19]{4}((\s|\.)+[a-zA-Z]{1,2}|[\uFF21-\uFF3A]{2})"

with MeCab(r"-F%m\t%f[0]\t%s") as nm:
    #for n in nm.parse(text, as_nodes=True):
    for n in nm.parse(text1, boundary_constraints=patt, as_nodes=True):
        print(n.feature)


証券	名詞	0
コード	名詞	0
は	助詞	0
4	名詞	0
桁	名詞	0
の	助詞	0
銘柄	名詞	0
識別	名詞	0
コード	名詞	0
です	助動詞	0
。	記号	0
たとえば	接続詞	0
、	記号	0
7777	名詞	1
です	助動詞	0
。	記号	0
あるいは	接続詞	0
7777 JP	名詞	1
や	助詞	0
7777.T	名詞	1
という	助詞	0
の	名詞	0
も	助詞	0
あり	動詞	0
ます	助動詞	0
。	記号	0
また	接続詞	0
「	記号	0
7777JP	名詞	1
」	記号	0
の	助詞	0
よう	名詞	0
な	助動詞	0
全角	名詞	0
文字	名詞	0
を	助詞	0
使う	動詞	0
表し	動詞	0
方	名詞	0
も	助詞	0
ある	動詞	0
かも	助詞	0
知れ	動詞	0
ませ	助動詞	0
ん	助動詞	0
。	記号	0
EOS

品詞制約の指定 (feature constraints)


In [3]:
text2 = "にわにはにわにわとりがいる"

feat = (("にわとり","*"), ("はにわ","*"), ("にわ","*"))

with MeCab(r"-F%m\t%f[0]") as nm:
    for n in nm.parse(text, as_nodes=True):
    for n in nm.parse(text2, feature_constraints=feat, as_nodes=True):
        if not (n.is_bos() or n.is_eos()):
            print(n.feature)


にわ	名詞
に	助詞
はにわ	名詞
にわとり	名詞
が	助詞
いる	動詞

詳しくは https://taku910.github.io/mecab/partial.html を参照してください。

以上。