読者です 読者をやめる 読者になる 読者になる

cloud9上でのPython による日本語自然言語処理 その4

cloud9 python 自然言語処理

飽きずにPython による日本語自然言語処理のコードを写経する行為を継続中。

「12.3.1 句構造解析」の以下のコードでエラーが発生。

jpcfg1 = nltk.parse_cfg("""
    ....
""")
for tree in parser.nbest_parse(sent)

Porting your code to NLTK 3.0 · nltk/nltk Wiki · GitHubによると、
①parse_cfg()のエラーはgrammar.parse_cfg() → CFG.fromstring()に変えないといけないようです。
②nbest_parse()のエラーはnbest_parse() → parse()に変えないといけないようです。

以下の様に修正するとテキストと同じ結果が表示されました。

# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import nltk
from nltk import CFG

jpcfg1 = CFG.fromstring("""
S -> PP VP
PP -> NP P
VP -> PP VP
VP -> V TENS
NP -> NP 'の' NP
NP -> NP 'と' NP
NP -> N
N -> '先生' | '自転車' | '学校' | '僕'
P -> 'は' | 'が' | 'を' | 'で' | 'に'
V -> '行k' | '殴r' | '見'
TENS -> 'ru' | 'ita'
""")

sent = u"先生 は 自転車 で 学校 に 行k ita".split(' ')
parser = nltk.ChartParser(jpcfg1)
for tree in parser.parse(sent):
    print unicode(tree)