ホームページ >バックエンド開発 >Python チュートリアル >Python と NLTK を使用したトークン化と WordNet の基本の概要

Python と NLTK を使用したトークン化と WordNet の基本の概要

PHPz
PHPzオリジナル
2024-08-02 02:57:40711ブラウズ

Introdução à Tokenização e Básicos do WordNet com Python e NLTK

自然言語処理 (NLP) は、言語学とコンピューティングを組み合わせて人間の言語を理解し、解釈し、操作する魅力的な分野です。このための最も強力なツールの 1 つは、Python の Natural Language Toolkit (NLTK) です。このテキストでは、トークン化の概念と、NLP で広く使用されている英語の語彙ベースである WordNet の使用について説明します。

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

トークン化は、テキストをトークンと呼ばれる小さな単位に分割するプロセスです。これらのトークンは、単語、語句、または個々の文字の場合もあります。トークン化は、アルゴリズムがテキストをより効果的に理解し、分析できるようにするため、テキスト処理における重要なステップです。

たとえば、「He​​llo, world!」というフレーズを考えてみましょう。このフレーズをトークン化すると、["Hello"、"、"、"world"、"!"] という 3 つのトークンが生成されます。この分割により、テキストの各部分を個別に分析できるようになり、感情分析、機械翻訳、固有表現認識などのタスクが容易になります。

NLTK では、いくつかの方法でトークン化を行うことができます。実際の例をいくつか見てみましょう。

文内のテキストのトークン化

テキストを文に分割することは、多くの NLP タスクの最初のステップです。 NLTK では、sent_tokenize 関数を使用してこれを簡単にします。

リーリー

結果は次のようになります:

リーリー

ここでは本文を3つの文に分けました。これは、各文を個別に処理できる、より詳細な分析に役立ちます。

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

テキストを文に分割したら、次のステップは通常、これらの文を単語に分割することです。これには、NLTK の word_tokenize 関数が使用されます。

リーリー

結果は次のようになります:

リーリー

これで、各単語と句読点記号が個別のトークンとして得られます。これは、テキスト内で各単語が何回出現するかをカウントする必要がある単語頻度分析などのタスクに不可欠です。

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

場合によっては、よりパーソナライズされたトークン化が必要になる場合があります。正規表現 (regex) は、これを行うための強力なツールです。 NLTK は、カスタム トークナイザーを作成するための RegexpTokenizer クラスを提供します。

リーリー

結果は次のようになります:

リーリー

ここでは、句読点を無視して英数字で構成される単語のみを選択する正規表現を使用します。

WordNet の概要

WordNet は、単語を synset と呼ばれる同義語のセットにグループ化し、短く一般的な定義を提供し、これらの単語間のさまざまな意味関係を記録する語彙データベースです。 NLTK では、WordNet を使用して、同義語、反意語、下位語、上位語などの関係を検索します。

WordNet を使用するには、NLTK から wordnet モジュールをインポートする必要があります。

リーリー

シンセットの検索

シンセット、または同義語のセットは、同じ意味を共有する単語のグループです。単語のシンセットを検索するには、synsets 関数を使用します。

リーリー

結果は、単語「dog」のさまざまな意味を表す構文のリストになります。

リーリー

各構文は、単語、品詞 (n は名詞、v は動詞など) を含む名前、および異なる意味を区別する番号によって識別されます。

定義と例

特定の synset の定義と使用例を取得できます。

リーリー

結果は次のようになります:

リーリー

これにより、この文脈における「犬」の意味と使用法が明確に理解できます。

同義語と反意語の検索

単語の同義語と反意語を見つけるには、synset lemmas を調べることができます。

リーリー

結果は、「良い」という言葉の同義語と反意語のリストになります。

リーリー

意味的類似性の計算

WordNet では、単語間の意味上の類似性を計算することもできます。類似性は、下位語/上位語グラフ内のシンセット間の距離に基づいています。

リーリー

結果は0と1の間の類似値になります。

リーリー

この値は、「犬」と「猫」が意味的に非常に似ていることを示しています。

Filtrando Stopwords

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.

Aplicações Práticas

Análise de Sentimentos

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.

Reconhecimento de Entidades Nomeadas

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.

Conclusão

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。