自然言語処理 (NLP) は、言語学とコンピューティングを組み合わせて人間の言語を理解し、解釈し、操作する魅力的な分野です。このための最も強力なツールの 1 つは、Python の Natural Language Toolkit (NLTK) です。このテキストでは、トークン化の概念と、NLP で広く使用されている英語の語彙ベースである WordNet の使用について説明します。
トークン化は、テキストをトークンと呼ばれる小さな単位に分割するプロセスです。これらのトークンは、単語、語句、または個々の文字の場合もあります。トークン化は、アルゴリズムがテキストをより効果的に理解し、分析できるようにするため、テキスト処理における重要なステップです。
たとえば、「Hello, world!」というフレーズを考えてみましょう。このフレーズをトークン化すると、["Hello"、"、"、"world"、"!"] という 3 つのトークンが生成されます。この分割により、テキストの各部分を個別に分析できるようになり、感情分析、機械翻訳、固有表現認識などのタスクが容易になります。
NLTK では、いくつかの方法でトークン化を行うことができます。実際の例をいくつか見てみましょう。
テキストを文に分割することは、多くの NLP タスクの最初のステップです。 NLTK では、sent_tokenize 関数を使用してこれを簡単にします。
結果は次のようになります:
ここでは本文を3つの文に分けました。これは、各文を個別に処理できる、より詳細な分析に役立ちます。
テキストを文に分割したら、次のステップは通常、これらの文を単語に分割することです。これには、NLTK の word_tokenize 関数が使用されます。
結果は次のようになります:
これで、各単語と句読点記号が個別のトークンとして得られます。これは、テキスト内で各単語が何回出現するかをカウントする必要がある単語頻度分析などのタスクに不可欠です。
場合によっては、よりパーソナライズされたトークン化が必要になる場合があります。正規表現 (regex) は、これを行うための強力なツールです。 NLTK は、カスタム トークナイザーを作成するための RegexpTokenizer クラスを提供します。
結果は次のようになります:
ここでは、句読点を無視して英数字で構成される単語のみを選択する正規表現を使用します。
WordNet は、単語を synset と呼ばれる同義語のセットにグループ化し、短く一般的な定義を提供し、これらの単語間のさまざまな意味関係を記録する語彙データベースです。 NLTK では、WordNet を使用して、同義語、反意語、下位語、上位語などの関係を検索します。
WordNet を使用するには、NLTK から wordnet モジュールをインポートする必要があります。
シンセット、または同義語のセットは、同じ意味を共有する単語のグループです。単語のシンセットを検索するには、synsets 関数を使用します。
結果は、単語「dog」のさまざまな意味を表す構文のリストになります。
各構文は、単語、品詞 (n は名詞、v は動詞など) を含む名前、および異なる意味を区別する番号によって識別されます。
特定の synset の定義と使用例を取得できます。
結果は次のようになります:
これにより、この文脈における「犬」の意味と使用法が明確に理解できます。
単語の同義語と反意語を見つけるには、synset lemmas を調べることができます。
結果は、「良い」という言葉の同義語と反意語のリストになります。
WordNet では、単語間の意味上の類似性を計算することもできます。類似性は、下位語/上位語グラフ内のシンセット間の距離に基づいています。
結果は0と1の間の類似値になります。
この値は、「犬」と「猫」が意味的に非常に似ていることを示しています。
Stopwords são palavras comuns que geralmente não adicionam muito significado ao texto, como "e", "a", "de". Remover essas palavras pode ajudar a focar nas partes mais importantes do texto. O NLTK fornece uma lista de stopwords para várias línguas.
from nltk.corpus import stopwords stop_words = set(stopwords.words('portuguese')) palavras = ["Olá", "mundo", "é", "um", "lugar", "bonito"] palavras_filtradas = [w for w in palavras if not w in stop_words] print(palavras_filtradas)
O resultado será:
['Olá', 'mundo', 'lugar', 'bonito']
Aqui, as stopwords foram removidas da lista original de palavras.
A análise de sentimentos é uma aplicação comum de PLN onde o objetivo é determinar a opinião ou emoção expressa em um texto. Tokenização e o uso de WordNet são passos importantes nesse processo.
Primeiro, dividimos o texto em palavras e removemos as stopwords. Em seguida, podemos usar os synsets para entender melhor o contexto e a polaridade das palavras.
texto = "Eu amo programação em Python!" palavras = word_tokenize(texto, language='portuguese') palavras_filtradas = [w for w in palavras if not w in stop_words] polaridade = 0 for palavra in palavras_filtradas: synsets = wordnet.synsets(palavra, lang='por') if synsets: for syn in synsets: polaridade += syn.pos_score() - syn.neg_score() print("Polaridade do texto:", polaridade)
Nesse exemplo simplificado, estamos somando os scores positivos e negativos dos synsets das palavras filtradas para determinar a polaridade geral do texto.
Outra aplicação é o reconhecimento de entidades nomeadas (NER), que identifica e classifica nomes de pessoas, organizações, locais, etc., em um texto.
import nltk nltk.download('maxent_ne_chunker') nltk.download('words') frase = "Barack Obama foi o 44º presidente dos Estados Unidos." palavras = word_tokenize(frase, language='portuguese') tags = nltk.pos_tag(palavras) entidades = nltk.ne_chunk(tags) print(entidades)
O resultado será uma árvore que identifica "Barack Obama" como uma pessoa e "Estados Unidos" como um local.
Neste texto, exploramos os conceitos básicos de tokenização e uso do WordNet com a biblioteca NLTK em Python. Vimos como dividir textos em sentenças e palavras, como buscar sinônimos e antônimos, calcular similaridades semânticas, e aplicações práticas como análise de sentimentos e reconhecimento de entidades nomeadas. A NLTK é uma ferramenta poderosa para qualquer pessoa interessada em processamento de linguagem natural, oferecendo uma ampla gama de funcionalidades para transformar e analisar textos de forma eficaz.
以上がPython と NLTK を使用したトークン化と WordNet の基本の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。