インターネット上のデータの絶え間ない増加により、テキスト情報を処理するツールの需要が生じています。
さらに、このテキスト分析ツールは、単語の頻度のカウント、テキストのセンチメント分析の計算、単語間の関係のパターンの検出など、低レベルと高レベルの両方のNLPタスクのソリューションを実装できることが非常に重要である。
TextBlobは様々なNLPタスクのための素晴らしい軽量ライブラリです。
このチュートリアルでは、PythonでTextBlobを使ってNグラム検出を行う方法を紹介します。
N-Gramsとは?
N-gramとは、与えられたテキストの集合からN個の要素を連続的に並べたものです。
広義には、必ずしも単語列ではなく、音素、音節、文字など、目的に応じて使い分けることができる。
しかし、自然言語処理では、N-gramを単語列と呼ぶことが一般的で、nは求める単語の量を表します。
N-gramは通常、次のような種類に分けられる。
- 1-gram – N-gramの中に1つの文字列を含むもの(例えば、YouTubeがTikTokに酷似した新しい短編動画形式を開始するなど、与えられた文章からYouTubeやTikTokというユニークな単語を含むことがある)。
- 2-gramまたはBigram – 典型的には、文書に現れる2つの文字列または単語の組み合わせ。短編ビデオまたはビデオフォーマットは、特定のコーパスのテキストでBigramの検索結果になる可能性があります(とフォーマットビデオ、短編ビデオの語順は同じままではありません)。
- 3-gramまたはTrigram – 一緒に処理される3つまでの要素を含むN-gram(例:short-form video formatまたはnew short-form video)等。
N-gramは、確率的言語モデルの分野で主な用途を見出した。
N-gramは、単語列の次の項目の確率を推定するものである。
この言語モデルのアプローチは、文字列内の各要素の位置の間に緊密な関係を仮定し、前の単語に対する次の単語の出現を計算する。
例えば、トリグラムモデル(N = 3)の場合、先行する2つの単語に基づいて文字列中の次の単語を N-1 = 2
として予測する。
N-gramモデルの他の応用例としては、2つの異なるテキストから得られたN-gramを互いに比較して、分析されたドキュメントの類似度を把握する剽窃の検出がある。
PythonによるTextBlobを用いたN-gram検索
文の解析
PythonでN-gramの検出を始めるには、まずTexBlobパッケージをインストールする必要があります。
このライブラリはPython 2とPython 3の両方に適用可能であることに注意してください。
また、必要なテキストコーパスをダウンロードします。
$ pip install -U textblob
$ python -m textblob.download_corpora
環境が整ったら、パッケージを読み込んで、サンプル文のN-gramを計算する準備ができました。
まずは、M.Mullenwegの言葉「技術は人々を結びつけるときに最も優れている」からN-gramを見てみましょう。
それでは、始めましょう。
from textblob import TextBlob
# Sample sentence for N-gram detection
sentence = "Technology is best when it brings people together"
分析したい文章を含む sentence
という文字列を作成しました。
この文字列を TextBlob
コンストラクタに渡して、これから処理を行う TextBlob
インスタンスにインジェクションします。
ngram_object = TextBlob(sentence)
それでは、N-gram検出を実行してみましょう。
まず、2-gramの検出を行う。
これは ngrams()
関数呼び出しの引数リストで指定されます。
ngrams = ngram_object.ngrams(n=2) # Computing Bigrams
print(ngrams)
ngrams()`関数は、n個の連続した単語のタプルのリストを返します。
この文の場合、bigramモデルは次のような文字列の集合を与えます。
[WordList(['Technology', 'is']),
WordList(['is', 'best']),
WordList(['best', 'when']),
WordList(['when', 'it']),
WordList(['it', 'brings']),
WordList(['brings', 'people']),
WordList(['people', 'together'])]
ドキュメント分析
TextBlobはシンプルなPythonライブラリですが、解析のための高度な機能も備えています。
N-gramを検出するために1つの文章を扱うことはあまりありません。
文書や記事、より大きなコーパスを扱う方がはるかに一般的です。
次の例では、CNBCのニュースポータルからBill Gatesに関する記事を使用します。
次の分析のために、テキストドキュメントを作成し、Input.txt
のような名前で呼ぶことにしましょう。
import sys
# Opening and reading the `Input.txt` file
corpus = open("Input.txt").read()
そして、いつものようにコンストラクタに corpus
を渡して TextBlob
インスタンスを生成し、 ngrams()
関数を実行します。
ngram_object = TextBlob(corpus)
trigrams = ngram_object.ngrams(n=3) # Computing Trigrams
print(trigrams)
これで、提供したコンテンツのトライグラムが出力されます。
ただし、句読点をどのように扱うかによって出力が異なる可能性があることに注意してください。
[WordList(['Bill', 'Gates', 'says']),
WordList(['Gates', 'says', 'that']),
WordList(['says', 'that', 'antitrust']),
WordList(['that', 'antitrust', 'regulators']),
WordList(['antitrust', 'regulators', 'should'])
<...>]
これに対して、与えられた記事のBigram解析を行うと、別のリストが出力されます。
ngram_object = TextBlob(corpus)
Bigram = ngram_object.ngrams(n=) # Computing Bigrams
print(Bigram)
出力からの抜粋。
[WordList(['Bill', 'Gates']),
WordList(['Gates', 'says']),
WordList(['says', 'that']),
WordList(['that', 'antitrust']),
WordList(['antitrust', 'regulators'])
<...>]
結論
N-Gramsの検出は、多くのNLPプロジェクトで単純かつ一般的なタスクです。
今回は、PythonでTextBlobを使ってN-Gram検出を行う方法を説明しました。