自然言語ツールキット-ツリーの変換
以下は、木を変換する2つの理由です-
- ディープパースツリーを変更するには
- 深い解析木を平坦化するには
ツリーまたはサブツリーを文に変換する
ここで説明する最初のレシピは、ツリーまたはサブツリーを文またはチャンク文字列に戻すことです。 これは非常に簡単です、次の例で見てみましょう-
例
出力
深い木の平坦化
ネストされたフレーズの深いツリーはチャンクのトレーニングに使用できないため、使用する前にそれらをフラット化する必要があります。 次の例では、 treebank コーパスから、ネストされたフレーズの深いツリーである3番目の解析済み文を使用します。
例
これを実現するために、単一のツリーを受け取り、最下位レベルのツリーのみを保持する新しいツリーを返す* deeptree_flat()という名前の関数を定義しています。 ほとんどの作業を行うために、 childtree_flat()*という名前のヘルパー関数を使用しています。
ここで、 treebank コーパスから、ネストされたフレーズの深いツリーである3番目の解析済み文で* deeptree_flat()*関数を呼び出します。 これらの関数は、deeptree.pyという名前のファイルに保存しました。
出力
Tree('S', [Tree('NP', [('Rudolph', 'NNP'), ('Agnew', 'NNP')]),
(',', ','), Tree('NP', [('55', 'CD'),
('years', 'NNS')]), ('old', 'JJ'), ('and', 'CC'),
Tree('NP', [('former', 'JJ'),
('chairman', 'NN')]), ('of', 'IN'), Tree('NP', [('Consolidated', 'NNP'),
('Gold', 'NNP'), ('Fields', 'NNP'), ('PLC',
'NNP')]), (',', ','), ('was', 'VBD'),
('named', 'VBN'), Tree('NP-SBJ', [('*-1', '-NONE-')]),
Tree('NP', [('a', 'DT'), ('nonexecutive', 'JJ'), ('director', 'NN')]),
('of', 'IN'), Tree('NP',
[('this', 'DT'), ('British', 'JJ'),
('industrial', 'JJ'), ('conglomerate', 'NN')]), ('.', '.')])
浅い木の構築
前のセクションでは、最低レベルのサブツリーのみを保持することにより、ネストされたフレーズの深いツリーをフラット化しました。 このセクションでは、最高レベルのサブツリーのみを保持します。 浅い木を作るために。 次の例では、 treebank コーパスからのネストされたフレーズの深いツリーである3番目に解析された文を使用します。
例
これを実現するために、* tree_shallow()*という名前の関数を定義しています。この関数は、上位のサブツリーラベルのみを保持することにより、ネストされたサブツリーをすべて削除します。
ここで、 treebank コーパスから、ネストされたフレーズの深いツリーである3 ^ rd ^の解析済み文に対して* tree_shallow()*関数を呼び出します。 これらの関数は、shallowtree.pyという名前のファイルに保存しました。
出力
Tree('S', [Tree('NP-SBJ-1', [('Rudolph', 'NNP'), ('Agnew', 'NNP'), (',', ','),
('55', 'CD'), ('years', 'NNS'), ('old', 'JJ'), ('and', 'CC'),
('former', 'JJ'), ('chairman', 'NN'), ('of', 'IN'), ('Consolidated', 'NNP'),
('Gold', 'NNP'), ('Fields', 'NNP'), ('PLC', 'NNP'), (',', ',')]),
Tree('VP', [('was', 'VBD'), ('named', 'VBN'), ('*-1', '-NONE-'), ('a', 'DT'),
('nonexecutive', 'JJ'), ('director', 'NN'), ('of', 'IN'), ('this', 'DT'),
('British', 'JJ'), ('industrial', 'JJ'), ('conglomerate', 'NN')]), ('.', '.')])
木の高さを取得することで違いを確認できます-
出力
出力
ツリーラベルの変換
解析ツリーには、チャンクツリーには存在しないさまざまな*ツリー*ラベルタイプがあります。 しかし、解析ツリーを使用してチャンカーをトレーニングする一方で、ツリーラベルの一部をより一般的なラベルタイプに変換することで、この種類を減らしたいと思います。 たとえば、NP-SBLとNP-TMPという2つの代替NPサブツリーがあります。 両方をNPに変換できます。 次の例でその方法を見てみましょう。
例
これを達成するために、次の2つの引数を取る* tree_convert()*という名前の関数を定義しています-
この関数は、マッピング内の値に基づいて一致するすべてのラベルが置き換えられた新しいツリーを返します。
次に、 treebank コーパスから、ネストされたフレーズの深いツリーである3番目の解析済み文で* tree_convert()関数を呼び出します。 これらの関数は *converttree.py という名前のファイルに保存しました。
出力
Tree('S', [Tree('NP-SBJ-1', [Tree('NP', [Tree('NNP', ['Rudolph']),
Tree('NNP', ['Agnew'])]), Tree(',', [',']),
Tree('UCP', [Tree('ADJP', [Tree('NP', [Tree('CD', ['55']),
Tree('NNS', ['years'])]),
Tree('JJ', ['old'])]), Tree('CC', ['and']),
Tree('NP', [Tree('NP', [Tree('JJ', ['former']),
Tree('NN', ['chairman'])]), Tree('PP', [Tree('IN', ['of']),
Tree('NP', [Tree('NNP', ['Consolidated']),
Tree('NNP', ['Gold']), Tree('NNP', ['Fields']),
Tree('NNP', ['PLC'])])])])]), Tree(',', [','])]),
Tree('VP', [Tree('VBD', ['was']),Tree('VP', [Tree('VBN', ['named']),
Tree('S', [Tree('NP', [Tree('-NONE-', ['*-1'])]),
Tree('NP-PRD', [Tree('NP', [Tree('DT', ['a']),
Tree('JJ', ['nonexecutive']), Tree('NN', ['director'])]),
Tree('PP', [Tree('IN', ['of']), Tree('NP',
[Tree('DT', ['this']), Tree('JJ', ['British']), Tree('JJ', ['industrial']),
Tree('NN', ['conglomerate'])])])])])])]), Tree('.', ['.'])])