0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

英語の長いドキュメントを分割加工するpart1

Posted at

このパッケージでは、NltkToolというクラスを提供しており、Natural Language Toolkit(NLTK)の機能を利用して、テキストを文に分割、単語のトークン化、品詞のタグ付け、ステミング、およびレンマ化といった一般的な自然言語処理タスクを行うことができます。

依存関係

このツールはNLTKライブラリに依存しています。もしまだシステムにインストールしていない場合は、別途インストールする必要があります。pipを使用してNLTKをインストールできます:

pip install nltk

ライブラリ本体

import nltk
from nltk.tokenize import word_tokenize
from nltk import pos_tag
from nltk.stem import PorterStemmer
from nltk.stem import WordNetLemmatizer

class NltkTool:
    def __init__(self):
        nltk.download('punkt')
        nltk.download('averaged_perceptron_tagger')
        nltk.download('wordnet')
        
    def split_text(self, text):
        return nltk.sent_tokenize(text)

    def tokenize_words(self, text):
        return word_tokenize(text)

    def tag_parts_of_speech(self, text):
        words = self.tokenize_words(text)
        return pos_tag(words)

    def stem_words(self, text):
        stemmer = PorterStemmer()
        words = self.tokenize_words(text)
        return [stemmer.stem(word) for word in words]

    def lemmatize_words(self, text):
        lemmatizer = WordNetLemmatizer()
        words = self.tokenize_words(text)
        return [lemmatizer.lemmatize(word) for word in words]

使い方

まず、必要なライブラリとNltkToolクラスをインポートします:

import nltk
from nltk.tokenize import word_tokenize
from nltk import pos_tag
from nltk.stem import PorterStemmer
from nltk.stem import WordNetLemmatizer

class NltkTool:
    # ...

次に、NltkToolクラスのインスタンスを作成します:

nltk_tool = NltkTool()

これでNltkToolクラスが提供するメソッドを使って、さまざまなNLPタスクを実行できます。

テキストを文に分割

long_text = "This is a sentence. This is another one! And yet another one?"
print(nltk_tool.split_text(long_text))

このコードは以下の出力を得ます:

['This is a sentence.', 'This is another one!', 'And yet another one?']

単語のトークン化

print(nltk_tool.tokenize_words(long_text))

このコードは以下の出力を得ます:

['This', 'is', 'a', 'sentence', '.', 'This', 'is', 'another', 'one', '!', 'And', 'yet', 'another', 'one', '?']

品詞のタグ付け

print(nltk_tool.tag_parts_of_speech(long_text))

このコードは、各タプルが入力テキストの単語とその対応する品詞を含むタプルのリストを出力します。

ステミング

print(nltk_tool.stem_words(long_text))

このコードはステミングされた単語のリストを出力します。

レンマ化

print(nltk_tool.lemmatize_words(long_text))

このコードはレンマ化された単語のリストを出力します。

このツールが正常に動作するためにはNLTKライブラリが必要です。また、ツールは初期化時に必要なNLTKデータセット('punkt', 'averaged_perceptron_tagger', 'wordnet')をダウンロードします。これが

正常に動作するためには、環境がインターネットに接続されていることを確認してください。

備考

ステミング

ステミングは、単語をその基本形に変換するプロセスです。この基本形は、多くの場合、単語の語幹または根元を表します。たとえば、「running」「runs」そして「ran」はすべて同じ語幹「run」を持つと考えられます。ステミングの目的は、単語の異なる形態を同じ形式に統一することで、テキスト解析の際に文の中で同じ語幹を持つ単語を一つのグループとして扱うことができます。ただし、ステミングは規則に基づく方法であるため、必ずしも言語学的に正確な基本形を生成するわけではありません。

レンマ化

レンマ化もステミングと同様に、単語をその基本形に変換するプロセスですが、レンマ化はより洗練された方法を使用します。レンマ化では、単語の形態論的(つまり、形や構造)な情報と辞書を使用して、単語をその語彙的または辞書形に変換します。この結果、レンマ化は通常、言語学的に正確な基本形を生成します。たとえば、「is」「are」「am」はすべて「be」にレンマ化されます。

これらの技術は両方とも自然言語処理のタスクで広く使用されていますが、適用するべき最善の方法は、特定の問題やアプリケーションによります。ステミングは一般にシンプルで高速ですが、レンマ化はより精密な結果を提供しますが、それに伴い計算コストが高くなる場合があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?