Natural LanguageToolkit-テキストのトークン化

トークン化とは何ですか?

これは、テキストを文や単語などの小さな部分に分割するプロセスとして定義できます。これらの小さな部分はトークンと呼ばれます。たとえば、単語は文のトークンであり、文は段落のトークンです。

NLPは、感情分析、QAシステム、言語翻訳、スマートチャットボット、音声システムなどのアプリケーションの構築に使用されることがわかっているため、それらを構築するには、テキストのパターンを理解することが不可欠です。上記のトークンは、これらのパターンを見つけて理解するのに非常に役立ちます。トークン化は、ステミングやレンマ化などの他のレシピの基本ステップと見なすことができます。

NLTKパッケージ

nltk.tokenize トークン化のプロセスを実現するためにNLTKモジュールによって提供されるパッケージです。

文を単語にトークン化する

文を単語に分割したり、文字列から単語のリストを作成したりすることは、すべてのテキスト処理アクティビティの重要な部分です。によって提供されるさまざまな機能/モジュールの助けを借りてそれを理解しましょうnltk.tokenize パッケージ。

word_tokenizeモジュール

word_tokenizeモジュールは、基本的な単語のトークン化に使用されます。次の例では、このモジュールを使用して文を単語に分割します。

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')

出力

['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']

TreebankWordTokenizerクラス

word_tokenize 上記で使用されているモジュールは、基本的に、tokenize()関数をインスタンスとして呼び出すラッパー関数です。 TreebankWordTokenizerクラス。文を単語に分割するためにword_tokenize()モジュールを使用しているときに得られるのと同じ出力が得られます。上で実装された同じ例を見てみましょう-

まず、自然言語ツールキット(nltk)をインポートする必要があります。

import nltk

今、インポートします TreebankWordTokenizer ワードトークナイザーアルゴリズムを実装するクラス-

from nltk.tokenize import TreebankWordTokenizer

次に、次のようにTreebankWordTokenizerクラスのインスタンスを作成します-

Tokenizer_wrd = TreebankWordTokenizer()

ここで、トークンに変換する文を入力します-

Tokenizer_wrd.tokenize(
   'Tutorialspoint.com provides high quality technical tutorials for free.'
)

出力

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials', 'for', 'free', '.'
]

完全な実装例

以下の完全な実装例を見てみましょう

import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')

出力

[
   'Tutorialspoint.com', 'provides', 'high', 'quality', 
   'technical', 'tutorials','for', 'free', '.'
]

トークナイザーの最も重要な規則は、収縮を分離することです。たとえば、この目的でword_tokenize()モジュールを使用すると、次のような出力が得られます。

import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')

出力

['wo', "n't"]]

によるそのような種類のコンベンション TreebankWordTokenizer受け入れられません。そのため、2つの代替単語トークナイザーがあります。PunktWordTokenizer そして WordPunctTokenizer

WordPunktTokenizerクラス

すべての句読点を個別のトークンに分割する代替単語トークナイザー。次の簡単な例でそれを理解しましょう-

from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")

出力

['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']

テキストを文にトークン化する

このセクションでは、テキスト/段落を文に分割します。NLTKは提供しますsent_tokenize この目的のためのモジュール。

なぜそれが必要なのですか?

私たちの頭に浮かんだ明らかな質問は、単語トークナイザーがある場合、なぜセンテンストークナイザーが必要なのか、なぜテキストをセンテンスにトークン化する必要があるのか​​ということです。文中の平均的な単語を数える必要があるとしたら、どうすればよいでしょうか。このタスクを実行するには、文のトークン化と単語のトークン化の両方が必要です。

次の簡単な例を使用して、文と単語のトークナイザーの違いを理解しましょう。

import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer. 
It is going to be a simple example."
sent_tokenize(text)

出力

[
   "Let us understand the difference between sentence & word tokenizer.", 
   'It is going to be a simple example.'
]

正規表現を使用した文のトークン化

単語トークナイザーの出力が受け入れられず、テキストのトークン化方法を完全に制御したい場合は、文のトークン化を行う際に使用できる正規表現を使用できます。NLTKは提供しますRegexpTokenizer これを達成するためのクラス。

以下の2つの例を使用して、概念を理解しましょう。

最初の例では、英数字トークンと一重引用符を照合するために正規表現を使用して、次のような収縮を分割しないようにします。 “won’t”

例1

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")

出力

["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']

最初の例では、正規表現を使用して空白をトークン化します。

例2

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")

出力

["won't", 'is', 'a', 'contraction']

上記の出力から、句読点がトークンに残っていることがわかります。パラメータgaps = Trueは、パターンがトークン化するギャップを識別しようとしていることを意味します。一方、gaps = Falseパラメータを使用する場合、パターンは次の例で確認できるトークンを識別するために使用されます-

import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")

出力

[ ]

空白の出力が表示されます。