Python の NLTK を使用した単語の置換と修正

WBOY
リリース: 2024-08-02 05:23:58
オリジナル
778 人が閲覧しました

Substituição e Correção de Palavras com NLTK em Python

自然言語処理 (NLP) について話すとき、最も重要なタスクの 1 つは単語の置換と修正です。これには、ステミング、見出し語化、スペル修正、同義語や反意語に基づく単語の置換などの技術が含まれます。これらのテクニックを使用すると、検索エンジン、チャットボット、感情分析など、テキスト分析の品質を大幅に向上させることができます。 Python の NLTK ライブラリがこれらのタスクにどのように役立つかを見てみましょう。

ステミング: 接尾辞の切断

ステミングは、単語から接尾辞を削除し、語根だけを残す技術です。たとえば、「running」という単語の語根は「corr」です。これは、検索エンジンがインデックスを作成する必要がある単語の量を減らすのに役立ちます。

NLTK では、PorterStemmer を使用してステミングを行うことができます。それがどのように機能するかを見てみましょう:

from nltk.stem import PorterStemmer

stemmer = PorterStemmer()
print(stemmer.stem("correndo"))  # Saída: corr
print(stemmer.stem("correção"))  # Saída: correc
ログイン後にコピー

ここでは、ステミングによって接尾辞が切り取られ、単語の語根だけが残ることがわかりました。これにより、単語のバリエーションを気にすることなく、単語の主な意味に集中し続けることができます。

見出し語化: 基本形式に戻る

見出し語化はステミングに似ていますが、接尾辞を切り取るのではなく、単語をその基本形式、つまり見出し語に変換します。たとえば、「走る」は「走る」になります。これは単語のコンテキストを考慮するため、ステミングよりも少し賢明です。

NLTK で見出し語化を行うには、WordNetLemmatizer を使用します。

from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("correndo", pos='v'))  # Saída: correr
print(lemmatizer.lemmatize("correções"))  # Saída: correção
ログイン後にコピー

この例では、見出し関数を使用し、動詞の品詞 (pos) を「v」として指定します。これは、NLTK が単語のコンテキストをより深く理解するのに役立ちます。

置換用の正規表現

テキスト内の特定の単語やパターンを置換したい場合があります。このためには、正規表現 (regex) が非常に役立ちます。たとえば、正規表現を使用して、「no」を「no」に拡張するなど、短縮形を拡張できます。

NLTK を使用してこれを行う方法は次のとおりです:

import re

texto = "Eu não posso ir à festa. Você não vai?"
expansoes = [("não", "não")]

def expandir_contracoes(texto, expansoes):
    for (contraido, expandido) in expansoes:
        texto = re.sub(r'\b' + contraido + r'\b', expandido, texto)
    return texto

print(expandir_contracoes(texto, expansoes))  # Saída: Eu não posso ir à festa. Você não vai?
ログイン後にコピー

この例では、expand_contracoes 関数は正規表現を使用して、テキスト内の短縮語を検索して置換します。

エンチャントによるスペルチェック

もう 1 つの重要なタスクはスペル修正です。テキストにはタイプミスやスペルミスがある場合があり、テキスト分析にはこれらを修正することが不可欠です。 pyenchant ライブラリはこれに最適です。

まず、pyenchant ライブラリをインストールする必要があります。

pip install pyenchant
ログイン後にコピー

その後、Enchant を使用して単語を修正できます。

import enchant

d = enchant.Dict("pt_BR")
palavra = "corrigindo"
if d.check(palavra):
    print(f"{palavra} está correta")
else:
    print(f"{palavra} está incorreta, sugestões: {d.suggest(palavra)}")
ログイン後にコピー

単語が間違っている場合は、Enchant が修正を提案します。

同義語の置換

単語をその同義語に置き換えると、テキストが充実し、繰り返しが避けられ、スタイルが改善されます。 WordNet を使用すると、同義語を簡単に見つけることができます。

その方法は次のとおりです:

from nltk.corpus import wordnet

def substituir_sinonimos(palavra):
    sinonimos = []
    for syn in wordnet.synsets(palavra, lang='por'):
        for lemma in syn.lemmas():
            sinonimos.append(lemma.name())
    return set(sinonimos)

print(substituir_sinonimos("bom"))  # Saída: {'bom', 'legal', 'ótimo', 'excelente'}
ログイン後にコピー

この例では、replace_synonyms 関数は、指定された単語の同義語のリストを返します。

反意語の置き換え

同義語と同様に、反意語も、特に感情分析などのタスクに役立ちます。 WordNet を使用して反意語を見つけることができます:

def substituir_antonimos(palavra):
    antonimos = []
    for syn in wordnet.synsets(palavra, lang='por'):
        for lemma in syn.lemmas():
            if lemma.antonyms():
                antonimos.append(lemma.antonyms()[0].name())
    return set(antonimos)

print(substituir_antonimos("bom"))  # Saída: {'mau', 'ruim'}
ログイン後にコピー

この関数は、指定された単語の反意語を検索します。

実用的なアプリケーション

これらのテクニックの実際の応用例をいくつか見てみましょう。

感情分析

感情分析には、テキストの極性 (肯定的、否定的、または中立的) の判断が含まれます。単語の置換により、この分析が改善されます。

texto = "Eu adorei o filme, mas a comida estava ruim."
palavras = word_tokenize(texto, language='portuguese')
polaridade = 0

for palavra in palavras:
    sinsets = wordnet.synsets(palavra, lang='por')
    if sinsets:
        for syn in sinsets:
            polaridade += syn.pos_score() - syn.neg_score()

print("Polaridade do texto:", polaridade)  # Saída: Polaridade do texto: 0.25 (por exemplo)
ログイン後にコピー
テキストの正規化

テキストの正規化には、テキストを一貫した形式に変換することが含まれます。これには、スペルの修正、ストップワードの削除、同義語の置換が含まれる場合があります。

stopwords = set(stopwords.words('portuguese'))
texto = "A análise de textos é uma área fascinante do PLN."
palavras = word_tokenize(texto, language='portuguese')
palavras_filtradas = [w for w in palavras se não w in stopwords]

texto_normalizado = " ".join(palavras_filtradas)
print(texto_normalizado)  # Saída: "análise textos área fascinante PLN"
ログイン後にコピー
改善されたテキスト検索

検索エンジンでは、同義語を置換すると、検索されたキーワードの同義語を使用するドキュメントが見つかり、検索結果が向上します。

consulta = "bom filme"
consulta_expandidas = []

for palavra em consulta.split():
    sinonimos = substituir_sinonimos(palavra)
    consulta_expandidas.extend(sinonimos)

print("Consulta expandida:", " ".join(consulta_expandidas))  # Saída: "bom legal ótimo excelente filme"
ログイン後にコピー

結論

このテキストでは、Python の NLTK ライブラリを使用したさまざまな単語の置換および修正テクニックを検討します。ステミング、見出語化、正規表現を使用した単語の置換、Enchant によるスペル修正、WordNet による同義語と反意語の置換の方法を確認しました。また、センチメント分析、テキスト正規化、検索エンジンにおけるこれらのテクニックの実際的な応用についても説明します。

これらの手法を使用すると、テキスト分析の品質が大幅に向上し、結果がより正確で関連性の高いものになります。 NLTK は、自然言語処理に取り組む人々向けに強力なツールを幅広く提供しており、これらのツールの使用方法を理解することは、NLP プロジェクトにとって不可欠です。

以上がPython の NLTK を使用した単語の置換と修正の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!