Natural-language-toolkit-transforming-chunks
自然言語ツールキット-チャンクの変換
チャンクを変換する理由
これまで、文からチャンクまたはフレーズを取得しましたが、それらをどうするかです。 重要なタスクの1つは、それらを変換することです。 しかし、なぜ? それは次のことをすることです-
- 文法修正と
- フレーズの並べ替え
重要でない/役に立たない単語のフィルタリング
フレーズの意味を判断したい場合、「the」、「a」などの一般的に使用される多くの単語が重要ではないか、役に立たないとします。 たとえば、次のフレーズを参照してください-
「映画は良かった」。
ここで最も重要な言葉は「映画」と「良い」です。 つまり、「the」と「was」はどちらも役に立たないか、意味がありません。 それがなければ、フレーズの意味も同じになるからです。 '良い映画'。
次のpythonレシピでは、不要な/重要でない単語を削除し、POSタグを使用して重要な単語を保持する方法を学習します。
例
まず、 treebank コーパスを調べてストップワードを探し、重要な品詞タグと重要でないものを決定する必要があります。 意味のない単語とタグの次の表を見てみましょう-
Word | Tag |
---|---|
a | DT |
All | PDT |
An | DT |
And | CC |
Or | CC |
That | WDT |
The | DT |
上記の表から、CC以外がわかります。他のすべてのタグはDTで終わります。つまり、タグのサフィックスを調べることで、意味のない単語を除外できます。
この例では、* filter()*という名前の関数を使用します。この関数は、単一のチャンクを取得し、意味のないタグ付き単語なしで新しいチャンクを返します。 この関数は、DTまたはCCで終わるタグをすべて除外します。
例
次に、Pythonレシピでこの関数filter()を使用して、重要でない単語を削除します-
出力
動詞修正
多くの場合、実際の言語では、動詞の形式が正しくありません。 たとえば、「あなたは元気ですか?」は正しくありません。 この文では、動詞の形式が正しくありません。 センテンスは「大丈夫ですか?」とする必要があります。NLTKは、動詞修正マッピングを作成することにより、そのような間違いを修正する方法を提供します。 これらの修正マッピングは、チャンクに複数の名詞があるのか、単数の名詞があるのかに応じて使用されます。
例
Pythonレシピを実装するには、まず動詞修正マッピングを定義する必要があります。 次のように2つのマッピングを作成しましょう-
複数から単数へのマッピング
単数から複数へのマッピング
上記のように、各マッピングには、別のタグ付き動詞にマップするタグ付き動詞があります。 この例の初期マッピングは、 _ is to are、was to was_ 、およびその逆の基本的なマッピングをカバーしています。
次に、* verbs()という名前の関数を定義します。この関数では、不適切な動詞の形式でチャンクを渡し、修正されたチャンクを取得できます。 それを行うために、 verb()関数は index_chunk()*という名前のヘルパー関数を使用します。これは、チャンクで最初のタグ付けされた単語の位置を検索します。
これらの関数を見てみましょう-
これらの関数を、PythonまたはAnacondaがインストールされているローカルディレクトリのPythonファイルに保存し、実行します。 verbcorrect.py として保存しました。
今度は、* verbs()関数をタグ付きのPOSで呼び出しましょう *is you fine チャンク-
出力
フレーズからの受動態の排除
もう1つの便利なタスクは、フレーズから受動態を排除することです。 これは、動詞の前後の単語を交換することで実行できます。 たとえば、 _ ‘the tutorial was great' ' は ' ‘the great tutorial’ _ に変換できます。
例
これを実現するために、動詞をピボットポイントとして使用して、チャンクの右側と左側を入れ替える* eliminate_passive()という名前の関数を定義しています。 ピボットする動詞を見つけるために、上で定義した index_chunk()*関数も使用します。
今、私たちはタグ付けされたPOSで* eliminate_passive()*関数を呼び出しましょう*チュートリアルは素晴らしかった*チャンク-
出力
名詞の枢機卿の入れ替え
ご存知のように、5などの主要な単語はチャンク内のCDとしてタグ付けされます。 これらの主要な単語は、名詞の前または後に現れることがよくありますが、正規化の目的では、常に名詞の前に置くと便利です。 たとえば、日付 January 5 は 5 January と書くことができます。 次の例でそれを理解しましょう。
例
これを実現するために、名詞の直後に発生する基数を名詞と交換する* swapping_cardinals()という名前の関数を定義しています。 これにより、枢機卿は名詞の直前に出現します。 指定されたタグとの等価比較を行うために、 tag_eql()*という名前のヘルパー関数を使用します。
今、私たちはswapping_cardinals()を定義することができます-
ここで、日付に* swapping_cardinals()関数を呼び出しましょう「1月5日」*-