テクノロジー AI 非公開: NLP 簡易パート 1 – テキストのクリーニングと前処理

NLP 簡易パート 1 – テキストのクリーニングと前処理

自然言語処理 (NLP) の驚くべき世界へようこそ。そこでは、コンピューターは私たちの言葉を理解する能力がますます向上しています。

コンピューターが人間の言語をどのように理解するかについて考えたことがありますか?答えは特別な秘密、NLP にあります。

NLP モデルのほとんどは、注意深くテキストを改良したおかげで、流暢に話しかけてくれます。この記事では、NLP が実行する重要なステップについて説明します。

句読点、特殊文字、ストップワード、ステミング、さらには見出し語化などについて説明します。文章の分割からスペルミスの修正まで、私たちはこれらのアイデアを理解しやすくするためにここにいます。

しかし、それだけではありません。数値の処理、短縮形の明確化、扱いにくい HTML タグの処理など、より複雑なトピックにも取り組んでいます。私たちの記事の各パートでは、NLP を輝かせる隠れた取り組みを紹介します。テキストのクリーニングと前処理によって、NLP がどのようにして想像もつかないような驚異的な効果を発揮するのかを学ぶ準備をしてください。

NLP
NLP
NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

NLPとは何ですか?

自然言語処理 (NLP) は、 コンピューター サイエンス、人間の言語、人工知能を組み合わせたものです。それは、コンピューターが人間の言語を理解し、説明し、作成できるようにするための特別な命令やツールを作成することです。

NLP は、コンピューター サイエンスと AI の手法を使用して、コンピューターが私たちと同じように単語や文章の意味を理解できるようにします。これにより、コンピューターは私たちと会話しやすくなり、実際の会話のように感じられるようになります。この特別な分野は、言語の翻訳、便利なチャットボット、テキスト内の感情の理解などの優れた機能につながりました。そこはテクノロジーと言語が出会う場所です。

たとえば、NLP は次のような場合に役立ちます。

  • 質問応答チャットボット
  • オーディオ モバイル/コンピュータ ロック
  • 音声認識
  • 電子メールのスパム検出
  • 要約

自然言語処理 (NLP) には 2 つの重要な側面があります。

  1. 自然言語理解 (NLU) は、 人間の言語を理解して解釈できるようにコンピューターを教えることに重点を置いています。 NLU アルゴリズムは、コンピューターが人間の発言や書き込みを「 理解 」するのに役立ちます。 NLU は、コンピューターが言語の意味、文脈、構造を把握するのに役立ち、コンピューターが正確かつ効果的に応答できるようにします。
  2. 自然言語生成 (NLG) : NLG は、コンピューターに人間のようなテキストを生成させることです。 NLG アルゴリズムは、構造化されたデータまたは情報を取得し、それを可読で一貫した文または段落に変換します。それはコンピューターに書き方を教えるようなものです。 NLG はパターンとルールを使用して、自然で理解しやすい人間に優しいコンテンツを 生成します
NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

NLP の基本用語

  • コーパス : ニュース、ツイート、情報などのテキスト ドキュメントの大規模なコレクションです。コンピュータが学習するのに役立ちます。 Ex-コーパスは文書(文書-1、文書-2、文書-3……)で構成されます。
  • ドキュメント : ドキュメントはさまざまな段落で構成されます。
  • トークンとトークン化 : トークンは文の小さな部分であり、トークン化は文をトークンに変換するプロセスです。例 – これが「私の名前はサンケットです」という文であるとします。したがって、トークン化後、[「My」、「Name」、「is」、「Sanket」] が得られます。
  • Morphine (ベースワード) : 接頭辞と接尾辞のない最小の意味のある単語。例-「不快」:「不快」+「快適」+「できる」。したがって、ここでの基本的な単語は「快適」です。

それでは、テキスト クリーニングの各手順とテクニックを見てみましょう。

NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

テキストクリーニングテクニック

ノイズエンティティの除去

ノイズ エンティティの除去は NLP の重要なステップであり、無関係または無意味なエンティティが特定され、テキスト データから削除されます。

一般的な用語、記号、無関係な名前などのエンティティを削除することで、テキストはより焦点を絞った正確なものになり、感情分析や固有表現認識などの NLP タスクの品質が向上します。このプロセスにより、気が散る要素や重要でない要素が含まれず、意味のあるコンテンツに基づいて分析が行われるようになります。

a] 特殊文字と句読点の削除:

このプロセスの 1 つは、特殊文字と句読点を削除することです。これらは、スマイリーフェイスや外国文字など、通常とは異なる文字や記号です。また、文章を整理して見せるために役立つドット、カンマ、マークも含まれます。

これが重要な理由は次のとおりです。これらの文字やマークにより、単語を読むのが難しくなる場合があります。言葉を理解しようとしたり、その意味を理解しようとしたりする機械を混乱させる可能性があります。そこで、機械が言葉をよりよく理解して、言葉の意味を理解したり、文章で人々がどのように感じたかを調べたりするなどの仕事をできるようにするために、それらを取り出します。

削除されることが多い特殊文字と句読点の例は次のとおりです。

| # 「」、. % & ^* ! @ ( ) _ + = – [ ]$ > \ { } ` ~ ; :/? <

以下は、テキストから句読点を削除する方法を理解できる Python コードです。

 import nltk

from nltk.tokenize import word_tokenize

nltk.download('punkt')  # Download the punkt tokenizer


# Define function
def remove_punctuation(text):

    words = word_tokenize(text)  # Tokenize the text into words

    words_without_punct = [word for word in words if word.isalnum()]  # Keep only alphanumeric words

    clean_text = ' '.join(words_without_punct)  # Join the words back into a cleaned text

    return clean_text


# Example input text with punctuation

input_text = "Hello, Everyone! How are you?"

# Remove punctuation using nltk

cleaned_text = remove_punctuation(input_text)


print("Input Text:", input_text)

print("Cleaned Text:", cleaned_text)

出力:

 Input Text: Hello, Everyone! How are you?

Cleaned Text: Hello Everyone How are you 

b] ストップワードの削除:

ストップワードは、「the」、「and」、「is」、「in」など、言語で頻繁に使用される一般的な単語ですが、多くの場合、それ自体では重要な意味を持ちません。 NLP はテキスト データから有意義な洞察を明らかにすることを目的としているため、ストップワードを削除することが重要です。ストップワードは、不必要な複雑さをもたらし、結果を歪める可能性があるため、テキスト分類、センチメント分析、トピックモデリングなどのタスクに影響を与える可能性があります。

NLP タスクの有効性を高めるために、ストップワードを識別して削除するためにさまざまな方法が使用されます。一般的なアプローチの 1 つは、言語に固有の事前定義されたストップワードのリストを利用することです。これらのリストには、一般に意味的価値がほとんどないと考えられる単語が含まれています。 Python の NLTK や spaCy などの NLP ライブラリは、この目的に使用できる組み込みのストップワード リストを提供します。

 import nltk

from nltk.corpus import stopwords

nltk.download('punkt')

nltk.download('stopwords')


# Sample sentence with more stopwords

sentence = 'There are so many movies in the world, but few of them were able to win Oscar'


# Tokenize the sentence

words = nltk.word_tokenize(sentence)


# Load English stopwords

stop_words = set(stopwords.words('english'))


# Remove stopwords

filtered_words = [w for w in words if w.lower() not in stop_words]


print("Original Sentence:", sentence)

print("After Stopword Removal:", " ".join(filtered_words))

出力:

 Original Sentence: There are so many movies in the world, but few of them were able to win Oscar.

After Stopword Removal: Many movies world, few able win Oscar.

スペル修正に向けて前進しましょう!

c] スペルチェックと修正:

スペルチェックは、書かれたコンテンツ内のスペルミスを特定して修正することにより、テキストクリーニングにおいて重要な役割を果たします。スペルが不正確だと混乱が生じ、テキストの信頼性に悪影響を及ぼす可能性があります。自動スペルチェックにより、テキストに誤りがなく、意図したメッセージが効果的に伝えられることが保証されます。コミュニケーション、コンテンツ作成、データ分析などのさまざまな分野において、プロ意識を維持し、正確な分析を保証するには、正確なスペルが不可欠です。

自動スペル修正にはいくつかの技術が使用されています。一般的なアプローチの 1 つは、正しく綴られた単語のリストを含む、事前に構築された辞書または言語モデルを使用することです。

 from spellchecker import SpellChecker


# Create a SpellChecker object

spell = SpellChecker()


# Sample text with spelling errors

text = "I Havv a gret idea To improov the Efficiensy of our procEss."


# Tokenize the text

words = text.split()


# Find and correct misspelled words

corrected_words = [spell.correction(word) for word in words]


# Join corrected words to form corrected text

corrected_text = " ".join(corrected_words)


print("Original Text:", text)

print("Corrected Text:", corrected_text)

出力:

 Original Text: I Havv a gret idea To improov the Efficiensy of our procEss.

Corrected Text: I have a great idea to improve the efficiency of our process.

ここで、NLP で数値を処理する方法を理解していきます。

d] 数値と名前エンティティの処理:

数値情報と日付情報は、自然言語テキストに表示される一般的なタイプのデータです。数量、測定値、価格、日付、時刻、期間などの重要な情報で構成される場合があります。

たとえば、数字 1000 は、さまざまなコンテキストで「1,000」、「1,000」、「1K」、「103」、または「千」と書くことができます。

これらの課題を克服するために、NLP システムは数値データと日付データをエンコードまたは正規化するためのいくつかの戦略を使用する必要があります。エンコードとは、データを処理または分析に適した表現に変換することを意味します。正規化とは、データを比較や操作が容易な標準または一貫した形式に変換することを意味します。

これらの課題を克服するための戦略:

トークン化 : テキストを単語、数字、記号、句読点などの小さな単位に分割します。テキスト内の数値データと日付データを認識するのに役立ちます。 (前述の通り)

解析 : 文法とロジックを使用してテキストの構造と意味を分析します。数値データと日付データのコンテキストを明確にし、曖昧さを解決します。

変換 : 一貫性を保つために数値と日付の形式を変更します。共通のシステムを使用して情報を標準化します。

抽出 : パターンまたはルールを通じて数値データと日付データを識別し、分離します。分析または処理のために関連情報を取得します。

このコードは正規表現を使用して数値を抽出します。データを抽出するために dateutil ライブラリを使用しています。

 import re

from dateutil.parser import parse


# Sample text containing numerical and date information

text = "Sales for the year 2023 reached $100,000 on 2023-08-31."


# Extract numerical information using regular expressions

numerical_entities = [int(match) for match in re.findall(r'\d+', text)]


# Extract date information using dateutil library

date_entities = parse(text, fuzzy_with_tokens=True)[0]


print("Numerical Entities:", numerical_entities)

print("Date Entities:", date_entities)

出力:

 Numerical Entities: [2023, 100000, 2023, 08, 31]
Date Entities: 2023-08-31 00:00:00

テキストから数値エンティティを抽出できるようにします。

e] 短縮形と略語の処理:

「私は」の「I’m」や「自然言語処理」の「NLP」などの単語を短縮することを、短縮や略語と呼びます。それらを元に展開することは、NLP システムにとって重要です。テキストを整理して理解しやすくし、混同や混乱を避けるのに役立ちます。拡張短縮形と略語は次のことに役立ちます。

  1. 一貫性と NLP モデルのパフォーマンスを強化します。
  2. メモリ使用量と計算負荷を軽減します。
  3. 曖昧さを明確にし、感情を維持します。
  4. 短縮形や略語を拡張するには、辞書、ルール、機械学習などのさまざまな方法を使用できますが、それぞれに長所と考慮事項があります。

短縮形と略語を処理するためのアプローチ:

  • 辞書ベース
  • 文法ベース
  • 機械学習ベース

シンプルな辞書ベースのアプローチ:

このコードは短縮形と略語を展開します。

 # Sample text with contractions and abbreviations

text = "I'm happy to see you and can't wait to discuss about NLP."


# Contraction dictionary with meaning

contraction_dict = {

    "I'm": "I am",

    "can't": "cannot"

    # Add more contractions and their expansions as needed

}


# Function to expand contractions

def expand_contractions(text, contraction_dict):

    words = text.split()

    expanded_words = [contraction_dict.get(word, word) for word in words]

    expanded_text = " ".join(expanded_words)

    return expanded_text

expanded_text = expand_contractions(text, contraction_dict)


print("Original Text:", text)

print("Expanded Text:", expanded_text)

出力:

 Original Text: I'm happy to see you and can't wait to discuss about NLP.

Expanded Text: I am happy to see you and cannot wait to discuss about NLP.

要件に応じて、略語や短縮語を追加または削除できます。

f] HTML タグとマークアップの処理:

HTML タグは山括弧 (< と >) 内に記述され、段落の <p> と </p> のように、通常はペアで記述されます。 HTML タグは、Web ページをフォーマットするコードであり、コンテンツの表示方法に影響を与えます。ノイズが発生したり構造が変化したりするため、テキスト分析が複雑になる可能性があります。ただし、要約などのタスクに役立つ意味論的な手がかりを提供します。

テキスト データ内の HTML タグを処理するには、HTML タグを削除してテキスト コンテンツを保持するためのいくつかのテクニックを使用できます。 HTML タグの削除とは、テキスト データから HTML タグを削除または置換することを意味し、テキスト コンテンツの保持とは、テキスト データからプレーン テキストを保持または取得することを意味します。

HTML タグを管理するためのテクニック:

正規表現 : HTML タグをすばやく削除しますが、タグが複雑な場合は不正確になる可能性があります。

HTML パーサー : タグを正確に理解しますが、速度が遅く、より複雑になる可能性があります。

Web Scraper : Web ページからプレーン テキストを簡単に取得できますが、可用性が制限される場合があります。

BeautifulSoup を使用してこれを実現するコードは次のとおりです。

 from bs4 import BeautifulSoup

import requests

import re


# URL of the web page to extract text from

url = "https://www.example.com"  # Replace with the actual URL


# Fetching HTML content from the web page

response = requests.get(url)

html_content = response.content


# Create a BeautifulSoup object

soup = BeautifulSoup(html_content, 'html.parser')


# Remove HTML tags using regular expressions

cleaned_text = re.sub(r'<.*?>', '', soup.get_text())


print("Original HTML:")

print(html_content)

print("\nCleaned Text (without HTML tags):")

print(cleaned_text)

上記のコードを実行するには、「https://www.example.com」を実際のリンクに置き換える必要があります。 BeautifulSoup を利用して、その Web サイトからコンテンツを取得します。 Web スクレイピング後、正規表現を使用して HTML タグを削除します。

次に、テキストの前処理に進みましょう。

NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

テキストの前処理

どの NLP プロジェクトでも、最初のタスクはテキストの前処理です。前処理には、入力テキストを一貫性のある分析可能な形式に整理することが含まれます。このステップは、優れた NLP アプリケーションを作成するために不可欠です。

テキストを前処理するにはさまざまな方法があります。

  • トークン化
  • 標準化
  • 正規化

このうち、最も重要なステップの 1 つはトークン化です。 トークン化に は、一連のテキスト データを単語、用語、文、記号、またはトークンと呼ばれるその他の意味のあるコンポーネントに分割することが含まれます。トークン化プロセスを実行するために利用できるオープンソース ツールが多数あります。

トークン化

トークン化は、NLP プロセスの初期段階として機能し、パイプライン全体に大きな影響を与えます。トークナイザーを使用することにより、非構造化データと自然言語テキストが管理可能なフラグメントに分割されます。 トークン として知られるこれらのフラグメントは、別個のコンポーネントとして扱うことができます。ドキュメントでは、トークンの頻度を利用してドキュメントを表すベクトルを作成できます。

この迅速な変換により、生の非構造化文字列 (テキスト ドキュメント) が機械学習に適した数値構造に変換されます。トークンには、コンピュータに価値のあるアクションと応答を開始するよう直接指示する可能性があります。あるいは、機械学習シーケンスの属性として機能し、より複雑な意思決定や動作を引き起こすこともできます。

トークン化には、テキストを文、単語、文字、またはサブワードに分割することが含まれます。テキストを文に分割することを文のトークン化と呼びます。一方、これを単語に分解すると、単語のトークン化として知られます。

トークン化にはさまざまな種類があります。

文のトークン化 の例:

 sent_tokenize(“My favorite movie is free guy”)

–> [「私の好きな映画は無料です」]

Word のトークン化 の例:

 Word_tokenize(“Elon musk is a Businessman”)

–> [「イーロン」、「ムスク」、「である」、「a」、「ビジネスマン」]

a] ホワイトスペースのトークン化

トークン化の最も単純な形式には、スペースまたは空白がある場所でテキストを分割することが含まれます。隙間があるところで文章を切り刻んでしまうようなものです。このアプローチは簡単ですが、句読点や特殊なケースを効果的に処理できない可能性があります。

ホワイトスペースのトークン化の例:

「自然言語処理ってすごいですね!」

–> [「自然」、「言語」、「処理」、「である」、「素晴らしい!」]。

b] 正規表現のトークン化

正規表現のトークン化には、パターンを使用してテキストをトークンに分割する場所を定義することが含まれます。これにより、単純な空白分割よりも正確なトークン化、句読点、特殊なケースの処理が可能になります。

正規表現のトークン化の例:

jack.sparrow@blackpearl.com までメールしてください。」

–> [「メール」、「me」、「at」、「jack」、「.」、「sparrow」、「@」、「blackpearl」、「.」、「com」、「.」]

c] ワードとサブワードのトークン化

このアプローチは、句読点を別のトークンとして保存することに重点を置いています。これは、感情分析など、句読点の意味を維持することが重要な場合に特に役立ちます。

サブワードのトークン化では、単語を、音節や単語の一部など、意味のある小さな単位に分割します。これは、複雑な単語構造を持つ言語に特に役立ちます。

Word のトークン化 の例:

“おお!これが信じられない。”

–> [「すごい」、「!」、「これ」、「です」、「信じられない」、「。」]

サブワードのトークン化 の例:

「信じられない」

–> [「信じられない」、「信じられない」]

d] バイトペアエンコーディング (BPE) トークン化

バイト ペア エンコーディングは、出現頻度に基づいて単語をより小さな単位に分割するサブワード トークン化手法です。これは、 まれな単語 や語彙外の単語を処理する場合に特に役立ちます。

e] ツリーバンクのトークン化

Treebank のトークン化では、言語規則に基づいた事前定義されたルールを使用してテキストをトークン化します。短縮形やハイフンでつながれた単語などの要素が考慮されます。

例: 「今日が 8 月 23 日だなんて信じられません!」

–> [「私」、「できる」、「’t」、「信じる」、「それ」、「’s」、「8月」、「23日」、「!」]。

以上がトークン化の種類です。次に、テキストの標準化に進みます。

テキストの標準化

小文字と大文字の使用

テキストの大文字と小文字を標準化することは、処理と分析を容易にするためにテキストを同じ大文字 (通常は小文字) に変換することを意味します。テキストの大文字と小文字を標準化するには、作業を容易にするために、テキスト内のすべての文字を同じにし、多くの場合は小文字にする必要があります。これは、コンピューターを使用して単語や文章を理解する言語分析などに役立ちます。これを行うと、コンピューターがよりよく理解できるようにテキストを整理するようなものです。

こうすることで、テキストの一貫性が高まり、混乱がなくなります。たとえば、単語の出現頻度を数えると、「Apple」と「apple」が同じものとして認識されるようになります。大文字という理由だけでコンピュータがそれらを別の単語として扱うことは望ましくありません。すべての言葉に対して公平であるようなものです!

しかし、このルールに従わない場合もあります。場合によっては、大きな大文字が重要です。たとえば、コンピューターの話では、「イギリス」や「NASA​​」など、変わらないほうがいいものの名前があります。また、「STOP!」などと大きな文字で書かれた場合も同様です。 「SOS」は意味が違ったり、感情を表しているのかもしれません。

もう 1 つ知っておくべきことは、さまざまな書き方が存在するということです。コンピューター コードでは、単語が 結合されたり 、アンダースコアで 区切られたりすることがあります。

つまり、テキストの大文字と小文字を標準化することは、コンピューターが理解できるようにテキストに適切なヘアカットを与えるようなものです。ただし、正当な理由でルールを破る場合には特別なケースがあることを覚えておいてください。

このコードは、単語を小文字に変換することで、「Apple」と「apple」という 2 つの単語が同じかどうかをチェックします。一致する場合、それらは同じであると出力されます。それ以外の場合は、それらは異なると印刷されます。

 # Standardizing text case

word1 = "Apple"

word2 = "apple"


# Convert words to lowercase

word1_lower = word1.lower()

word2_lower = word2.lower()


# Comparing standardized words

if word1_lower == word2_lower:

    print("The words are the same when case is ignored.")

else:

    print("The words are different even when case is ignored.")

出力:

 The words are the same when case is ignored.

正常化に向けて進みましょう。

正規化

正規化は、トークンを基本形式に変換するプロセスです。正規化では、単語から語形変化が削除されて、その基本形式が取得されます。

正規化の目的は、重要な意味は持たないものの、NLP タスクの精度に影響を与える可能性があるテキストのバリエーションを減らすことです。テキスト処理における特定の課題に対処するために、さまざまな形式の正規化が使用されます。

たとえば、

am、are、is => be

猫、猫、猫、猫’ => 猫

以下の文にマッピングを適用してみましょう。

ドンの猫はすべて異なる色 => ドンの猫はすべて異なる色

NLP には正規化のための一般的な方法があります。

  • ステミング
  • 見出し語化

a]ステミング

ステミングについて説明する前に、「 ステム 」という用語について理解しましょう。単語の語幹は単語の基本的な形式であると考えてください。単語に余分な部分を追加することを 「屈折」 と呼び、それが新しい単語を作る方法です。

ステムワードとは、単語から接頭辞と接尾辞を削除した後に残る単語です。場合によっては、ステミングにより、辞書にない単語や意味のない単語が生成されることがあります。したがって、ステミングはさまざまなタスクにおいて見出し語化技術ほど優れていません。

例:「早く」、「もっと早く」、「一番早く」

語幹のある単語 – 「 Quickli 」 (辞書の単語ではありません)

例 – 「カエルが踊っていて、犬が歌っている。」

ステムトークン: [‘frog’、’are’、’ danc ‘、’and’、’dog’、’are’、’sing’】

ステミング過剰 : より多くの文字がステミングされるか、複数のステムが同じ単語にマップされ、元の意味が失われます。

例 – 「コンピュータ」、「計算」、および「計算」 -> 「計算」

ステミングの下 : この例を確認してください

例 – 「ジャンプ」、「ジャンプ」、「ジャンプ」 –> 「ジャンプ」、「ジャンプ」、「ジャンプ」。

ここで、3 つの単語は基本単語「jump」にステムされるはずですが、アルゴリズムはそれを捕捉できませんでした。

NLTK のステマーの種類:

  • ポーターステマー
  • ランカスターステマー、
  • スノーボールステマーなど

ステミングには 3 つのステマー (PorterStemmer、LancasterStemmer、SnowballStemmer) をすべて使用しています。文を個々の単語に分割し、単語をできるだけ短くする 3 つの異なる方法を試し、比較のために語幹を抽出したトークンを出力します。

 import nltk

from nltk.stem import PorterStemmer, LancasterStemmer, SnowballStemmer

from nltk.tokenize import word_tokenize

nltk.download('punkt')


# Sample sentence

sentence = "frogs are dancing and dogs are singing."

tokens = word_tokenize(sentence)


# Stemmers

stemmers = [PorterStemmer(), LancasterStemmer(), SnowballStemmer("english")]

for stemmer in stemmers:
    stemmed_tokens = [stemmer.stem(token) for token in tokens]
    print(f"{stemmer.__class__.__name__} Stemmed Tokens:", stemmed_tokens)

出力:

 PorterStemmer Stemmed Tokens: ['frog', 'are', 'danc', 'and', 'dog', 'are', 'sing', '.']

LancasterStemmer Stemmed Tokens: ['frog', 'ar', 'dant', 'and', 'dog', 'ar', 'sing', '.']

SnowballStemmer Stemmed Tokens: ['frog', 'are', 'danc', 'and', 'dog', 'are', 'sing', '.']

同じことを行うライブラリは他にもたくさんあります。ここで、見出し語化とは何かを理解してみましょう。

b] 見出し語化

見出し語化もステミングと同じですが、若干の変更があります。見出し語化は、単語を 意味のある 基本形式に変換します。見出し語化は、語彙と文法関係に従って適切な意味を持つ単語の基本形を取得する手順です。

見出し語化は、単語を見出し と呼ばれる基本形式または通常の形式に変更する方法です。たとえば、「猫」という単語の標準形は「cat」、「走る」の標準形は「run」です。

見出語化では、文内の正しい単語の種類と単語の意味、さらにその文を取り巻くより大きな状況を知る必要があります。語尾を切り捨てるのとは異なり、見出し語化では状況に応じて適切な正規形を選択しようとします。

必要に応じて、以下のレンマタイザーのいずれかを選択できます。

  • ワードネットレンマタイザ
  • スペイシーレンマタイザー
  • テキストブロブ
  • CLIPSパターン
  • スタンフォードコアNLP
  • Gensim Lemmatizer
  • ツリータガー

NLTK ライブラリを使用して、WordnetLemmatizer を使用して見出し語化を実行します。まず文をトークン化し、次に語彙から意味のある基本単語を見つけるために見出し語化して、それらを戻して見出し語化された文を出力します。

 import nltk

from nltk.stem import WordNetLemmatizer

from nltk.tokenize import word_tokenize

nltk.download('punkt')

nltk.download('wordnet')


# Create a lemmatizer object

lemmatizer = WordNetLemmatizer()


# Sample sentence

sentence = "boys are running and mosquitos are flying."


# Tokenize the sentence

tokens = word_tokenize(sentence)


# Lemmatize the tokens

lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens]


# Join the lemmatized tokens to form a sentence

lemmatized_sentence = " ".join(lemmatized_tokens)


print("Original Sentence:", sentence)

print("Lemmatized Sentence:", lemmatized_sentence)

出力:

 Original Sentence: boys are running and mosquitos are flying.

Lemmatized Sentence: Boy are run and mosquito are fly.

さあ、終わりの時間です!

結論

この記事では、自然言語処理 (NLP) の基本について説明しました。私たちはさまざまな分野における NLP の重要性について学び、テキストを整理して準備する方法を理解することから旅を始めました。特殊文字の削除、テキストのトークン化などについて説明しました。また、正規化、ステミング、見出し語化、数値と日付の処理などの概念も理解しました。さらに、HTML コンテンツの処理についても垣間見ることができました。

しかし、私たちの旅はまだ続きます。高度なテキスト クリーニング方法を発見する方法は世界中にあります。品詞のタグ付けについて詳しく説明し、さまざまなツールやライブラリを探索し、エキサイティングな NLP プロジェクトについて詳しく説明します。この記事はほんの始まりにすぎません。パート 2 の準備を整えてください。パート 2 では、より多くの知識が待っています。

自然言語処理を学びたい場合は、最高の NLP コースをいくつか紹介します。

「 NLP 簡易パート 1 – テキストのクリーニングと前処理」についてわかりやすく解説!絶対に観るべきベスト2動画

【超簡単】Cloud Natural Language APIを活用してテキストから感情分析を行う方法についてわかりやすく解説
NLP の概要 |テキストのクリーニングと前処理

自然言語処理 (NLP) の驚くべき世界へようこそ。そこでは、コンピューターは私たちの言葉を理解する能力がますます向上しています。

コンピューターが人間の言語をどのように理解するかについて考えたことがありますか?答えは特別な秘密、NLP にあります。

NLP モデルのほとんどは、注意深くテキストを改良したおかげで、流暢に話しかけてくれます。この記事では、NLP が実行する重要なステップについて説明します。

句読点、特殊文字、ストップワード、ステミング、さらには見出し語化などについて説明します。文章の分割からスペルミスの修正まで、私たちはこれらのアイデアを理解しやすくするためにここにいます。

しかし、それだけではありません。数値の処理、短縮形の明確化、扱いにくい HTML タグの処理など、より複雑なトピックにも取り組んでいます。私たちの記事の各パートでは、NLP を輝かせる隠れた取り組みを紹介します。テキストのクリーニングと前処理によって、NLP がどのようにして想像もつかないような驚異的な効果を発揮するのかを学ぶ準備をしてください。

NLP
NLP
NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

NLPとは何ですか?

自然言語処理 (NLP) は、 コンピューター サイエンス、人間の言語、人工知能を組み合わせたものです。それは、コンピューターが人間の言語を理解し、説明し、作成できるようにするための特別な命令やツールを作成することです。

NLP は、コンピューター サイエンスと AI の手法を使用して、コンピューターが私たちと同じように単語や文章の意味を理解できるようにします。これにより、コンピューターは私たちと会話しやすくなり、実際の会話のように感じられるようになります。この特別な分野は、言語の翻訳、便利なチャットボット、テキスト内の感情の理解などの優れた機能につながりました。そこはテクノロジーと言語が出会う場所です。

たとえば、NLP は次のような場合に役立ちます。

  • 質問応答チャットボット
  • オーディオ モバイル/コンピュータ ロック
  • 音声認識
  • 電子メールのスパム検出
  • 要約

自然言語処理 (NLP) には 2 つの重要な側面があります。

  1. 自然言語理解 (NLU) は、 人間の言語を理解して解釈できるようにコンピューターを教えることに重点を置いています。 NLU アルゴリズムは、コンピューターが人間の発言や書き込みを「 理解 」するのに役立ちます。 NLU は、コンピューターが言語の意味、文脈、構造を把握するのに役立ち、コンピューターが正確かつ効果的に応答できるようにします。
  2. 自然言語生成 (NLG) : NLG は、コンピューターに人間のようなテキストを生成させることです。 NLG アルゴリズムは、構造化されたデータまたは情報を取得し、それを可読で一貫した文または段落に変換します。それはコンピューターに書き方を教えるようなものです。 NLG はパターンとルールを使用して、自然で理解しやすい人間に優しいコンテンツを 生成します
NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

NLP の基本用語

  • コーパス : ニュース、ツイート、情報などのテキスト ドキュメントの大規模なコレクションです。コンピュータが学習するのに役立ちます。 Ex-コーパスは文書(文書-1、文書-2、文書-3……)で構成されます。
  • ドキュメント : ドキュメントはさまざまな段落で構成されます。
  • トークンとトークン化 : トークンは文の小さな部分であり、トークン化は文をトークンに変換するプロセスです。例 – これが「私の名前はサンケットです」という文であるとします。したがって、トークン化後、[「My」、「Name」、「is」、「Sanket」] が得られます。
  • Morphine (ベースワード) : 接頭辞と接尾辞のない最小の意味のある単語。例-「不快」:「不快」+「快適」+「できる」。したがって、ここでの基本的な単語は「快適」です。

それでは、テキスト クリーニングの各手順とテクニックを見てみましょう。

NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

テキストクリーニングテクニック

ノイズエンティティの除去

ノイズ エンティティの除去は NLP の重要なステップであり、無関係または無意味なエンティティが特定され、テキスト データから削除されます。

一般的な用語、記号、無関係な名前などのエンティティを削除することで、テキストはより焦点を絞った正確なものになり、感情分析や固有表現認識などの NLP タスクの品質が向上します。このプロセスにより、気が散る要素や重要でない要素が含まれず、意味のあるコンテンツに基づいて分析が行われるようになります。

a] 特殊文字と句読点の削除:

このプロセスの 1 つは、特殊文字と句読点を削除することです。これらは、スマイリーフェイスや外国文字など、通常とは異なる文字や記号です。また、文章を整理して見せるために役立つドット、カンマ、マークも含まれます。

これが重要な理由は次のとおりです。これらの文字やマークにより、単語を読むのが難しくなる場合があります。言葉を理解しようとしたり、その意味を理解しようとしたりする機械を混乱させる可能性があります。そこで、機械が言葉をよりよく理解して、言葉の意味を理解したり、文章で人々がどのように感じたかを調べたりするなどの仕事をできるようにするために、それらを取り出します。

削除されることが多い特殊文字と句読点の例は次のとおりです。

| # 「」、. % & ^* ! @ ( ) _ + = – [ ]$ > \ { } ` ~ ; :/? <

以下は、テキストから句読点を削除する方法を理解できる Python コードです。

 import nltk

from nltk.tokenize import word_tokenize

nltk.download('punkt')  # Download the punkt tokenizer


# Define function
def remove_punctuation(text):

    words = word_tokenize(text)  # Tokenize the text into words

    words_without_punct = [word for word in words if word.isalnum()]  # Keep only alphanumeric words

    clean_text = ' '.join(words_without_punct)  # Join the words back into a cleaned text

    return clean_text


# Example input text with punctuation

input_text = "Hello, Everyone! How are you?"

# Remove punctuation using nltk

cleaned_text = remove_punctuation(input_text)


print("Input Text:", input_text)

print("Cleaned Text:", cleaned_text)

出力:

 Input Text: Hello, Everyone! How are you?

Cleaned Text: Hello Everyone How are you 

b] ストップワードの削除:

ストップワードは、「the」、「and」、「is」、「in」など、言語で頻繁に使用される一般的な単語ですが、多くの場合、それ自体では重要な意味を持ちません。 NLP はテキスト データから有意義な洞察を明らかにすることを目的としているため、ストップワードを削除することが重要です。ストップワードは、不必要な複雑さをもたらし、結果を歪める可能性があるため、テキスト分類、センチメント分析、トピックモデリングなどのタスクに影響を与える可能性があります。

NLP タスクの有効性を高めるために、ストップワードを識別して削除するためにさまざまな方法が使用されます。一般的なアプローチの 1 つは、言語に固有の事前定義されたストップワードのリストを利用することです。これらのリストには、一般に意味的価値がほとんどないと考えられる単語が含まれています。 Python の NLTK や spaCy などの NLP ライブラリは、この目的に使用できる組み込みのストップワード リストを提供します。

 import nltk

from nltk.corpus import stopwords

nltk.download('punkt')

nltk.download('stopwords')


# Sample sentence with more stopwords

sentence = 'There are so many movies in the world, but few of them were able to win Oscar'


# Tokenize the sentence

words = nltk.word_tokenize(sentence)


# Load English stopwords

stop_words = set(stopwords.words('english'))


# Remove stopwords

filtered_words = [w for w in words if w.lower() not in stop_words]


print("Original Sentence:", sentence)

print("After Stopword Removal:", " ".join(filtered_words))

出力:

 Original Sentence: There are so many movies in the world, but few of them were able to win Oscar.

After Stopword Removal: Many movies world, few able win Oscar.

スペル修正に向けて前進しましょう!

c] スペルチェックと修正:

スペルチェックは、書かれたコンテンツ内のスペルミスを特定して修正することにより、テキストクリーニングにおいて重要な役割を果たします。スペルが不正確だと混乱が生じ、テキストの信頼性に悪影響を及ぼす可能性があります。自動スペルチェックにより、テキストに誤りがなく、意図したメッセージが効果的に伝えられることが保証されます。コミュニケーション、コンテンツ作成、データ分析などのさまざまな分野において、プロ意識を維持し、正確な分析を保証するには、正確なスペルが不可欠です。

自動スペル修正にはいくつかの技術が使用されています。一般的なアプローチの 1 つは、正しく綴られた単語のリストを含む、事前に構築された辞書または言語モデルを使用することです。

 from spellchecker import SpellChecker


# Create a SpellChecker object

spell = SpellChecker()


# Sample text with spelling errors

text = "I Havv a gret idea To improov the Efficiensy of our procEss."


# Tokenize the text

words = text.split()


# Find and correct misspelled words

corrected_words = [spell.correction(word) for word in words]


# Join corrected words to form corrected text

corrected_text = " ".join(corrected_words)


print("Original Text:", text)

print("Corrected Text:", corrected_text)

出力:

 Original Text: I Havv a gret idea To improov the Efficiensy of our procEss.

Corrected Text: I have a great idea to improve the efficiency of our process.

ここで、NLP で数値を処理する方法を理解していきます。

d] 数値と名前エンティティの処理:

数値情報と日付情報は、自然言語テキストに表示される一般的なタイプのデータです。数量、測定値、価格、日付、時刻、期間などの重要な情報で構成される場合があります。

たとえば、数字 1000 は、さまざまなコンテキストで「1,000」、「1,000」、「1K」、「103」、または「千」と書くことができます。

これらの課題を克服するために、NLP システムは数値データと日付データをエンコードまたは正規化するためのいくつかの戦略を使用する必要があります。エンコードとは、データを処理または分析に適した表現に変換することを意味します。正規化とは、データを比較や操作が容易な標準または一貫した形式に変換することを意味します。

これらの課題を克服するための戦略:

トークン化 : テキストを単語、数字、記号、句読点などの小さな単位に分割します。テキスト内の数値データと日付データを認識するのに役立ちます。 (前述の通り)

解析 : 文法とロジックを使用してテキストの構造と意味を分析します。数値データと日付データのコンテキストを明確にし、曖昧さを解決します。

変換 : 一貫性を保つために数値と日付の形式を変更します。共通のシステムを使用して情報を標準化します。

抽出 : パターンまたはルールを通じて数値データと日付データを識別し、分離します。分析または処理のために関連情報を取得します。

このコードは正規表現を使用して数値を抽出します。データを抽出するために dateutil ライブラリを使用しています。

 import re

from dateutil.parser import parse


# Sample text containing numerical and date information

text = "Sales for the year 2023 reached $100,000 on 2023-08-31."


# Extract numerical information using regular expressions

numerical_entities = [int(match) for match in re.findall(r'\d+', text)]


# Extract date information using dateutil library

date_entities = parse(text, fuzzy_with_tokens=True)[0]


print("Numerical Entities:", numerical_entities)

print("Date Entities:", date_entities)

出力:

 Numerical Entities: [2023, 100000, 2023, 08, 31]
Date Entities: 2023-08-31 00:00:00

テキストから数値エンティティを抽出できるようにします。

e] 短縮形と略語の処理:

「私は」の「I’m」や「自然言語処理」の「NLP」などの単語を短縮することを、短縮や略語と呼びます。それらを元に展開することは、NLP システムにとって重要です。テキストを整理して理解しやすくし、混同や混乱を避けるのに役立ちます。拡張短縮形と略語は次のことに役立ちます。

  1. 一貫性と NLP モデルのパフォーマンスを強化します。
  2. メモリ使用量と計算負荷を軽減します。
  3. 曖昧さを明確にし、感情を維持します。
  4. 短縮形や略語を拡張するには、辞書、ルール、機械学習などのさまざまな方法を使用できますが、それぞれに長所と考慮事項があります。

短縮形と略語を処理するためのアプローチ:

  • 辞書ベース
  • 文法ベース
  • 機械学習ベース

シンプルな辞書ベースのアプローチ:

このコードは短縮形と略語を展開します。

 # Sample text with contractions and abbreviations

text = "I'm happy to see you and can't wait to discuss about NLP."


# Contraction dictionary with meaning

contraction_dict = {

    "I'm": "I am",

    "can't": "cannot"

    # Add more contractions and their expansions as needed

}


# Function to expand contractions

def expand_contractions(text, contraction_dict):

    words = text.split()

    expanded_words = [contraction_dict.get(word, word) for word in words]

    expanded_text = " ".join(expanded_words)

    return expanded_text

expanded_text = expand_contractions(text, contraction_dict)


print("Original Text:", text)

print("Expanded Text:", expanded_text)

出力:

 Original Text: I'm happy to see you and can't wait to discuss about NLP.

Expanded Text: I am happy to see you and cannot wait to discuss about NLP.

要件に応じて、略語や短縮語を追加または削除できます。

f] HTML タグとマークアップの処理:

HTML タグは山括弧 (< と >) 内に記述され、段落の <p> と </p> のように、通常はペアで記述されます。 HTML タグは、Web ページをフォーマットするコードであり、コンテンツの表示方法に影響を与えます。ノイズが発生したり構造が変化したりするため、テキスト分析が複雑になる可能性があります。ただし、要約などのタスクに役立つ意味論的な手がかりを提供します。

テキスト データ内の HTML タグを処理するには、HTML タグを削除してテキスト コンテンツを保持するためのいくつかのテクニックを使用できます。 HTML タグの削除とは、テキスト データから HTML タグを削除または置換することを意味し、テキスト コンテンツの保持とは、テキスト データからプレーン テキストを保持または取得することを意味します。

HTML タグを管理するためのテクニック:

正規表現 : HTML タグをすばやく削除しますが、タグが複雑な場合は不正確になる可能性があります。

HTML パーサー : タグを正確に理解しますが、速度が遅く、より複雑になる可能性があります。

Web Scraper : Web ページからプレーン テキストを簡単に取得できますが、可用性が制限される場合があります。

BeautifulSoup を使用してこれを実現するコードは次のとおりです。

 from bs4 import BeautifulSoup

import requests

import re


# URL of the web page to extract text from

url = "https://www.example.com"  # Replace with the actual URL


# Fetching HTML content from the web page

response = requests.get(url)

html_content = response.content


# Create a BeautifulSoup object

soup = BeautifulSoup(html_content, 'html.parser')


# Remove HTML tags using regular expressions

cleaned_text = re.sub(r'<.*?>', '', soup.get_text())


print("Original HTML:")

print(html_content)

print("\nCleaned Text (without HTML tags):")

print(cleaned_text)

上記のコードを実行するには、「https://www.example.com」を実際のリンクに置き換える必要があります。 BeautifulSoup を利用して、その Web サイトからコンテンツを取得します。 Web スクレイピング後、正規表現を使用して HTML タグを削除します。

次に、テキストの前処理に進みましょう。

NLP 簡易パート 1 - テキストのクリーニングと前処理
NLP 簡易パート 1 – テキストのクリーニングと前処理

テキストの前処理

どの NLP プロジェクトでも、最初のタスクはテキストの前処理です。前処理には、入力テキストを一貫性のある分析可能な形式に整理することが含まれます。このステップは、優れた NLP アプリケーションを作成するために不可欠です。

テキストを前処理するにはさまざまな方法があります。

  • トークン化
  • 標準化
  • 正規化

このうち、最も重要なステップの 1 つはトークン化です。 トークン化に は、一連のテキスト データを単語、用語、文、記号、またはトークンと呼ばれるその他の意味のあるコンポーネントに分割することが含まれます。トークン化プロセスを実行するために利用できるオープンソース ツールが多数あります。

トークン化

トークン化は、NLP プロセスの初期段階として機能し、パイプライン全体に大きな影響を与えます。トークナイザーを使用することにより、非構造化データと自然言語テキストが管理可能なフラグメントに分割されます。 トークン として知られるこれらのフラグメントは、別個のコンポーネントとして扱うことができます。ドキュメントでは、トークンの頻度を利用してドキュメントを表すベクトルを作成できます。

この迅速な変換により、生の非構造化文字列 (テキスト ドキュメント) が機械学習に適した数値構造に変換されます。トークンには、コンピュータに価値のあるアクションと応答を開始するよう直接指示する可能性があります。あるいは、機械学習シーケンスの属性として機能し、より複雑な意思決定や動作を引き起こすこともできます。

トークン化には、テキストを文、単語、文字、またはサブワードに分割することが含まれます。テキストを文に分割することを文のトークン化と呼びます。一方、これを単語に分解すると、単語のトークン化として知られます。

トークン化にはさまざまな種類があります。

文のトークン化 の例:

 sent_tokenize(“My favorite movie is free guy”)

–> [「私の好きな映画は無料です」]

Word のトークン化 の例:

 Word_tokenize(“Elon musk is a Businessman”)

–> [「イーロン」、「ムスク」、「である」、「a」、「ビジネスマン」]

a] ホワイトスペースのトークン化

トークン化の最も単純な形式には、スペースまたは空白がある場所でテキストを分割することが含まれます。隙間があるところで文章を切り刻んでしまうようなものです。このアプローチは簡単ですが、句読点や特殊なケースを効果的に処理できない可能性があります。

ホワイトスペースのトークン化の例:

「自然言語処理ってすごいですね!」

–> [「自然」、「言語」、「処理」、「である」、「素晴らしい!」]。

b] 正規表現のトークン化

正規表現のトークン化には、パターンを使用してテキストをトークンに分割する場所を定義することが含まれます。これにより、単純な空白分割よりも正確なトークン化、句読点、特殊なケースの処理が可能になります。

正規表現のトークン化の例:

jack.sparrow@blackpearl.com までメールしてください。」

–> [「メール」、「me」、「at」、「jack」、「.」、「sparrow」、「@」、「blackpearl」、「.」、「com」、「.」]

c] ワードとサブワードのトークン化

このアプローチは、句読点を別のトークンとして保存することに重点を置いています。これは、感情分析など、句読点の意味を維持することが重要な場合に特に役立ちます。

サブワードのトークン化では、単語を、音節や単語の一部など、意味のある小さな単位に分割します。これは、複雑な単語構造を持つ言語に特に役立ちます。

Word のトークン化 の例:

“おお!これが信じられない。”

–> [「すごい」、「!」、「これ」、「です」、「信じられない」、「。」]

サブワードのトークン化 の例:

「信じられない」

–> [「信じられない」、「信じられない」]

d] バイトペアエンコーディング (BPE) トークン化

バイト ペア エンコーディングは、出現頻度に基づいて単語をより小さな単位に分割するサブワード トークン化手法です。これは、 まれな単語 や語彙外の単語を処理する場合に特に役立ちます。

e] ツリーバンクのトークン化

Treebank のトークン化では、言語規則に基づいた事前定義されたルールを使用してテキストをトークン化します。短縮形やハイフンでつながれた単語などの要素が考慮されます。

例: 「今日が 8 月 23 日だなんて信じられません!」

–> [「私」、「できる」、「’t」、「信じる」、「それ」、「’s」、「8月」、「23日」、「!」]。

以上がトークン化の種類です。次に、テキストの標準化に進みます。

テキストの標準化

小文字と大文字の使用

テキストの大文字と小文字を標準化することは、処理と分析を容易にするためにテキストを同じ大文字 (通常は小文字) に変換することを意味します。テキストの大文字と小文字を標準化するには、作業を容易にするために、テキスト内のすべての文字を同じにし、多くの場合は小文字にする必要があります。これは、コンピューターを使用して単語や文章を理解する言語分析などに役立ちます。これを行うと、コンピューターがよりよく理解できるようにテキストを整理するようなものです。

こうすることで、テキストの一貫性が高まり、混乱がなくなります。たとえば、単語の出現頻度を数えると、「Apple」と「apple」が同じものとして認識されるようになります。大文字という理由だけでコンピュータがそれらを別の単語として扱うことは望ましくありません。すべての言葉に対して公平であるようなものです!

しかし、このルールに従わない場合もあります。場合によっては、大きな大文字が重要です。たとえば、コンピューターの話では、「イギリス」や「NASA​​」など、変わらないほうがいいものの名前があります。また、「STOP!」などと大きな文字で書かれた場合も同様です。 「SOS」は意味が違ったり、感情を表しているのかもしれません。

もう 1 つ知っておくべきことは、さまざまな書き方が存在するということです。コンピューター コードでは、単語が 結合されたり 、アンダースコアで 区切られたりすることがあります。

つまり、テキストの大文字と小文字を標準化することは、コンピューターが理解できるようにテキストに適切なヘアカットを与えるようなものです。ただし、正当な理由でルールを破る場合には特別なケースがあることを覚えておいてください。

このコードは、単語を小文字に変換することで、「Apple」と「apple」という 2 つの単語が同じかどうかをチェックします。一致する場合、それらは同じであると出力されます。それ以外の場合は、それらは異なると印刷されます。

 # Standardizing text case

word1 = "Apple"

word2 = "apple"


# Convert words to lowercase

word1_lower = word1.lower()

word2_lower = word2.lower()


# Comparing standardized words

if word1_lower == word2_lower:

    print("The words are the same when case is ignored.")

else:

    print("The words are different even when case is ignored.")

出力:

 The words are the same when case is ignored.

正常化に向けて進みましょう。

正規化

正規化は、トークンを基本形式に変換するプロセスです。正規化では、単語から語形変化が削除されて、その基本形式が取得されます。

正規化の目的は、重要な意味は持たないものの、NLP タスクの精度に影響を与える可能性があるテキストのバリエーションを減らすことです。テキスト処理における特定の課題に対処するために、さまざまな形式の正規化が使用されます。

たとえば、

am、are、is => be

猫、猫、猫、猫’ => 猫

以下の文にマッピングを適用してみましょう。

ドンの猫はすべて異なる色 => ドンの猫はすべて異なる色

NLP には正規化のための一般的な方法があります。

  • ステミング
  • 見出し語化

a]ステミング

ステミングについて説明する前に、「 ステム 」という用語について理解しましょう。単語の語幹は単語の基本的な形式であると考えてください。単語に余分な部分を追加することを 「屈折」 と呼び、それが新しい単語を作る方法です。

ステムワードとは、単語から接頭辞と接尾辞を削除した後に残る単語です。場合によっては、ステミングにより、辞書にない単語や意味のない単語が生成されることがあります。したがって、ステミングはさまざまなタスクにおいて見出し語化技術ほど優れていません。

例:「早く」、「もっと早く」、「一番早く」

語幹のある単語 – 「 Quickli 」 (辞書の単語ではありません)

例 – 「カエルが踊っていて、犬が歌っている。」

ステムトークン: [‘frog’、’are’、’ danc ‘、’and’、’dog’、’are’、’sing’】

ステミング過剰 : より多くの文字がステミングされるか、複数のステムが同じ単語にマップされ、元の意味が失われます。

例 – 「コンピュータ」、「計算」、および「計算」 -> 「計算」

ステミングの下 : この例を確認してください

例 – 「ジャンプ」、「ジャンプ」、「ジャンプ」 –> 「ジャンプ」、「ジャンプ」、「ジャンプ」。

ここで、3 つの単語は基本単語「jump」にステムされるはずですが、アルゴリズムはそれを捕捉できませんでした。

NLTK のステマーの種類:

  • ポーターステマー
  • ランカスターステマー、
  • スノーボールステマーなど

ステミングには 3 つのステマー (PorterStemmer、LancasterStemmer、SnowballStemmer) をすべて使用しています。文を個々の単語に分割し、単語をできるだけ短くする 3 つの異なる方法を試し、比較のために語幹を抽出したトークンを出力します。

 import nltk

from nltk.stem import PorterStemmer, LancasterStemmer, SnowballStemmer

from nltk.tokenize import word_tokenize

nltk.download('punkt')


# Sample sentence

sentence = "frogs are dancing and dogs are singing."

tokens = word_tokenize(sentence)


# Stemmers

stemmers = [PorterStemmer(), LancasterStemmer(), SnowballStemmer("english")]

for stemmer in stemmers:
    stemmed_tokens = [stemmer.stem(token) for token in tokens]
    print(f"{stemmer.__class__.__name__} Stemmed Tokens:", stemmed_tokens)

出力:

 PorterStemmer Stemmed Tokens: ['frog', 'are', 'danc', 'and', 'dog', 'are', 'sing', '.']

LancasterStemmer Stemmed Tokens: ['frog', 'ar', 'dant', 'and', 'dog', 'ar', 'sing', '.']

SnowballStemmer Stemmed Tokens: ['frog', 'are', 'danc', 'and', 'dog', 'are', 'sing', '.']

同じことを行うライブラリは他にもたくさんあります。ここで、見出し語化とは何かを理解してみましょう。

b] 見出し語化

見出し語化もステミングと同じですが、若干の変更があります。見出し語化は、単語を 意味のある 基本形式に変換します。見出し語化は、語彙と文法関係に従って適切な意味を持つ単語の基本形を取得する手順です。

見出し語化は、単語を見出し と呼ばれる基本形式または通常の形式に変更する方法です。たとえば、「猫」という単語の標準形は「cat」、「走る」の標準形は「run」です。

見出語化では、文内の正しい単語の種類と単語の意味、さらにその文を取り巻くより大きな状況を知る必要があります。語尾を切り捨てるのとは異なり、見出し語化では状況に応じて適切な正規形を選択しようとします。

必要に応じて、以下のレンマタイザーのいずれかを選択できます。

  • ワードネットレンマタイザ
  • スペイシーレンマタイザー
  • テキストブロブ
  • CLIPSパターン
  • スタンフォードコアNLP
  • Gensim Lemmatizer
  • ツリータガー

NLTK ライブラリを使用して、WordnetLemmatizer を使用して見出し語化を実行します。まず文をトークン化し、次に語彙から意味のある基本単語を見つけるために見出し語化して、それらを戻して見出し語化された文を出力します。

 import nltk

from nltk.stem import WordNetLemmatizer

from nltk.tokenize import word_tokenize

nltk.download('punkt')

nltk.download('wordnet')


# Create a lemmatizer object

lemmatizer = WordNetLemmatizer()


# Sample sentence

sentence = "boys are running and mosquitos are flying."


# Tokenize the sentence

tokens = word_tokenize(sentence)


# Lemmatize the tokens

lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens]


# Join the lemmatized tokens to form a sentence

lemmatized_sentence = " ".join(lemmatized_tokens)


print("Original Sentence:", sentence)

print("Lemmatized Sentence:", lemmatized_sentence)

出力:

 Original Sentence: boys are running and mosquitos are flying.

Lemmatized Sentence: Boy are run and mosquito are fly.

さあ、終わりの時間です!

結論

この記事では、自然言語処理 (NLP) の基本について説明しました。私たちはさまざまな分野における NLP の重要性について学び、テキストを整理して準備する方法を理解することから旅を始めました。特殊文字の削除、テキストのトークン化などについて説明しました。また、正規化、ステミング、見出し語化、数値と日付の処理などの概念も理解しました。さらに、HTML コンテンツの処理についても垣間見ることができました。

しかし、私たちの旅はまだ続きます。高度なテキスト クリーニング方法を発見する方法は世界中にあります。品詞のタグ付けについて詳しく説明し、さまざまなツールやライブラリを探索し、エキサイティングな NLP プロジェクトについて詳しく説明します。この記事はほんの始まりにすぎません。パート 2 の準備を整えてください。パート 2 では、より多くの知識が待っています。

自然言語処理を学びたい場合は、最高の NLP コースをいくつか紹介します。

「 NLP 簡易パート 1 – テキストのクリーニングと前処理」についてわかりやすく解説!絶対に観るべきベスト2動画

【超簡単】Cloud Natural Language APIを活用してテキストから感情分析を行う方法についてわかりやすく解説
NLP の概要 |テキストのクリーニングと前処理