テキストのポテンシャルを引き出す:プリエンベッドテキストクリーニング方法の詳細な調査

テキストのポテンシャルを引き出す' means 'Unlocking the potential of text'. 'プリエンベッドテキストクリーニング方法の詳細な調査' means 'Detailed investigation of pre-embedded text cleaning methods'. So, the condensed version would be 'Unlocking the potential of text Detailed investigation of pre-embedded text cleaning methods

この記事では、テキストデータから最大のパフォーマンスを引き出すために必要な異なるクリーニング技術について説明します。

Amador Loureiroさんによる写真、Unsplashより

テキストクリーニングの方法をデモンストレーションするために、Kaggleの「metamorphosis」というテキストデータセットを使用します。

まず、クリーニングプロセスに必要なPythonライブラリをインポートしましょう。

import nltk, re, stringfrom nltk.corpus import stopwordsfrom nltk.stem.porter import PorterStemmer

次に、データセットを読み込みましょう。

file_directory = 'データセットのローカルディレクトリへのリンク'file = open(file_directory, 'rt', encoding='utf-8')text = file.read()file.close()

上記のコードセルが動作するためには、データファイルのローカルディレクトリパスを指定する必要があります。

テキストデータを単語ごとに分割します。

words = text.split()print(words[:120])

ここでは、句読点が保持されていること(例:armor-likeやwasn’t)がわかります。また、文末の句読点も最後の単語と一緒に保持されていること(例:thought.)がわかりますが、これは望ましくありません。

そこで、今度は非単語の文字を使用してデータを分割してみましょう。

words = re.split(r'\W+', text)print(words[:120])

ここでは、「thought.」のような単語が「thought」に変換されていることがわかります。ただし、「wasn’t」のような単語が「wasn」と「t」に変換されてしまっている問題があります。修正する必要があります。

Pythonでは、string.punctuationを使用して一度に複数の句読点を取得できます。これを使用してテキストから句読点を削除します。

print(string.punctuation)

したがって、単語ごとに分割し、データに記録されているすべての句読点を削除します。

words = text.split()re_punc = re.compile('[%s]' % re.escape(string.punctuation))stripped = [re_punc.sub('', word) for word in words]print(stripped[:120])

ここでは、「thought.」のような単語がなくなったことがわかりますが、「wasn’t」のような単語は正しく残っています。

テキストには印刷できない文字も含まれることがあります。これらもフィルタリングする必要があります。これには、Pythonの「string.printable」を使用できます。これは印刷可能な文字のリストを提供します。したがって、このリストに存在しない文字を削除します。

re_print = re.compile('[^%s]' % re.escape(string.printable))result = [re_print.sub('', word) for word in stripped]print(result[:120])

さて、すべての単語を小文字にします。これにより、ボキャブラリーが減ります。ただし、いくつかの欠点もあります。これを行うと、企業名としての「Apple」と果物としての「apple」などの2つの単語が同じエンティティと見なされます。

result = [word.lower() for word in result]
print(result[:120])

また、1文字の単語はほとんどのNLPタスクに貢献しないため、それらも削除します。

result = [word for word in result if len(word) > 1]
print(result[:120])

NLPでは、「is」「as」「the」のような頻出単語はモデルの学習にあまり貢献しないため、これらの単語はストップワードとして知られ、テキストクリーニングのプロセスで削除することが推奨されています。

import nltk
from nltk.corpus import stopwords
stop_words = stopwords.words('english')
print(stop_words)

result = [word for word in result if word not in set(stop_words)]
print(words[:110])

ここで、同じ意味を持つ単語を単一の単語に減らします。たとえば、「run」「running」「runs」の単語は、トレーニング中のモデルに対して同じ意味を与えるため、「run」という単語にのみ減らします。これは、nltkライブラリのPorterStemmerクラスを使用して実行できます。

from nltk.stem.porter import PorterStemmer
ps = PorterStemmer()
result = [ps.stem(word) for word in result]
print(words[:110])

ステミングされた単語には意味があるかもしれません。単語に意味を持たせたい場合は、ステミング技術ではなく、単語が変換後も意味を持つことを保証するレンマ形成技術を使用できます。

次に、アルファベットだけで作られていない単語を削除しましょう

result = [word for word in result if word.isalpha()]
print(result[:110])

この段階では、テキストデータは単語埋め込み技術に使用するには十分なものに見えます。ただし、特定の種類のデータ(たとえば、HTMLコード)には、このプロセスに追加のステップが必要な場合があることに注意してください。

この記事がお役に立てれば幸いです。記事についてのご意見がありましたら、お知らせください。建設的なフィードバックは大いに歓迎します。

LinkedInでご連絡ください。

メールアドレス:[email protected]

素晴らしい一日をお過ごしください。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more