Natural-language-toolkit-training-tokenizer-filtering-stopwords

提供:Dev Guides
移動先:案内検索

トークナイザーのトレーニングとストップワードのフィルタリング

なぜ自分のセンテンストークナイザーを訓練するのですか?

これは、NLTKのデフォルトのセンテンストークナイザーがある場合、なぜセンテンストークナイザーをトレーニングする必要があるのか​​という非常に重要な質問です。 この質問に対する答えは、NLTKのデフォルトのセンテンストークナイザーの品質にあります。 NLTKのデフォルトのトークナイザは、基本的には汎用のトークナイザです。 非常にうまく機能しますが、非標準のテキスト、おそらく私たちのテキスト、または独自の書式設定を持つテキストには適さないかもしれません。 そのようなテキストをトークン化して最良の結果を得るには、独自のセンテンストークナイザーをトレーニングする必要があります。

実装例

この例では、webtextコーパスを使用します。 このコーパスから使用するテキストファイルは、以下に示すダイアログとしてフォーマットされたテキストを持っています-

Guy: How old are you?
Hipster girl: You know, I never answer that question. Because to me, it's about
how mature you are, you know? I mean, a fourteen year old could be more mature
than a twenty-five year old, right? I'm sorry, I just never answer that question.
Guy: But, uh, you're older than eighteen, right?
Hipster girl: Oh, yeah.

このテキストファイルは、training_tokenizerという名前で保存しました。 NLTKは PunktSentenceTokenizer という名前のクラスを提供します。このクラスの助けを借りて、カスタムテキストトークナイザーを生成するために生のテキストでトレーニングできます。 ファイルを読み込むか、* raw()*メソッドを使用してNLTKコーパスから生のテキストを取得できます。

以下の例を見て、それについてさらに洞察を得ましょう-

まず、 nltk.tokenize パッケージから PunktSentenceTokenizer クラスをインポートします-

from nltk.tokenize import PunktSentenceTokenizer
*nltk.corpus* パッケージから *webtext* コーパスをインポートします
from nltk.corpus import webtext

次に、* raw()メソッドを使用して、次のように *training_tokenizer.txt ファイルから生のテキストを取得します-

text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')

次に、 PunktSentenceTokenizer のインスタンスを作成し、次のようにテキストファイルからトークン化文を出力します-

sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

出力

White guy: So, do you have any plans for this evening?
print(sents_1[1])
Output:
Asian girl: Yeah, being angry!
print(sents_1[670])
Output:
Guy: A hundred bucks?
print(sents_1[675])
Output:
Girl: But you already have a Big Mac...

完全な実装例

from nltk.tokenize import PunktSentenceTokenizer
from nltk.corpus import webtext
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

出力

White guy: So, do you have any plans for this evening?

NLTKのデフォルトのセンテンストークナイザーとトレーニング済みの独自のセンテンストークナイザーの違いを理解するために、デフォルトのセンテンストークナイザーを使用して同じファイルをトークン化します。 sent_tokenize()。

from nltk.tokenize import sent_tokenize
   from nltk.corpus import webtext
   text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sents_2 = sent_tokenize(text)

print(sents_2[0])
Output:

White guy: So, do you have any plans for this evening?
print(sents_2[675])
Output:
Hobo: Y'know what I'd do if I was rich?

出力の違いを利用して、独自のセンテンストークナイザーをトレーニングすることがなぜ有用であるかという概念を理解できます。

ストップワードとは何ですか?

テキストには存在するが、文の意味には寄与しないいくつかの一般的な単語。 そのような単語は、情報検索や自然言語処理の目的ではまったく重要ではありません。 最も一般的なストップワードは「the」と「a」です。

NLTKストップワードコーパス

実際、Natural Language Tool Kitには、多くの言語の単語リストを含むストップワードコーパスが付属しています。 次の例の助けを借りて、その使用法を理解しましょう-

まず、[。underline]#nltk.corpus#パッケージから[.underline]#stopwords#コーパスをインポートします-

from nltk.corpus import stopwords

ここで、英語のストップワードを使用します

english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

出力

['I', 'writer']

完全な実装例

from nltk.corpus import stopwords
english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

出力

['I', 'writer']

サポートされている言語の完全なリストを見つける

次のPythonスクリプトの助けを借りて、NLTKストップワードコーパスでサポートされている言語の完全なリストを見つけることもできます-

from nltk.corpus import stopwords
stopwords.fileids()

出力

[
   'arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french',
   'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali',
   'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish',
   'swedish', 'tajik', 'turkish'
]