1

以下のコードを使用して、既にタグ付けされ、トークン化された RSS フィードをチャンクしています。「print subtree.leaves()」は出力しています:

[('Prime', 'NNP'), ('Minister', 'NNP'), ('Stephen', 'NNP'), ('Harper', 'NNP')] [('US', 'NNP' ), ('President', 'NNP'), ('Barack', 'NNP'), ('Obama', 'NNP')] [('what\', 'NNP')] [('Keystone', 'NNP'), ('XL', 'NNP')] [('CBC', 'NNP'), ('ニュース', 'NNP')]

これはpythonリストのように見えますが、直接アクセスする方法や反復する方法がわかりません。サブツリー出力だと思います。

このサブツリーを、操作可能なリストに変換できるようにしたいと考えています。これを行う簡単な方法はありますか?Python でツリーに遭遇したのはこれが初めてで、道に迷っています。私はこのリストで終わりたい:

docs = ["首相スティーブン ハーパー"、"米国大統領バラク オバマ"、"何\"、"キーストーン XL"、"CBC ニュース"]

これを実現する簡単な方法はありますか?

いつも助けてくれてありがとう!

grammar = r""" Proper: {<NNP>+} """

cp = nltk.RegexpParser(grammar)
result = cp.parse(posDocuments)
nounPhraseDocs.append(result) 

for subtree in result.subtrees(filter=lambda t: t.node == 'Proper'):
# print the noun phrase as a list of part-of-speech tagged words

    print subtree.leaves()
print" "
4

2 に答える 2

6

node現在に置き換えられていlabelます。したがって、Viktorの回答を変更します:

docs = []

for subtree in result.subtrees(filter=lambda t: t.label() == 'Proper'):
    docs.append(" ".join([a for (a,b) in subtree.leaves()]))

Properこれにより、チャックの一部であるトークンのみのリストが表示されます。filterメソッドから引数を削除するsubtrees()と、ツリーの特定の親に属するすべてのトークンのリストを取得できます。

于 2017-01-16T09:56:46.667 に答える