中国語/英語テキストマイニング前処理プロセスの概要

7595 ワード

中国語と英語のテキストマイニングの特徴


第一に、中国語のテキストは英語の単語のスペースのように隔てられていないので、英語のように最も簡単なスペースと句読点で分詞を直接完成することはできません.だから一般的に私たちは分詞アルゴリズムで分詞を完成する必要があります.テキストマイニングの分詞原理の中で、私たちはすでに中国語の分詞原理を話しています.ここではあまり言いません.
第二に、中国語のコードはutf 8ではなくunicodeです.これにより、分詞の際、英語に比べて符号化の問題を処理することになります.

1中国語テキストマイニング前処理プロセス


1.1データ収集


テキストマイニングの前に、テキストデータを得る必要があります.テキストデータの取得方法は一般的に2つあります.他の人が作ったコーパスと自分が爬虫類でネット上で自分のコーパスデータを登ることです.
1つ目の方法では、よく使われるテキストコーパスがネット上にたくさんありますが、皆さんが勉強するだけであれば、直接ダウンロードして使用することができますが、いくつかの特殊なテーマのコーパス、例えば「機械学習」関連のコーパスであれば、この方法は通用せず、私たち自身が2つ目の方法で取得する必要があります.
2つ目の爬虫類の使用方法には、オープンソースツールが多く、一般的な爬虫類はbeautifulsoupを使用します.しかし、上記の「機械学習」に関連するコーパスのような特殊なコーパスデータが必要であり、トピック爬虫類(フォーカス爬虫類とも呼ばれる)で完了する必要があります.一般的にacheを使用します.acheでは、キーワードまたは分類アルゴリズムを使用して、必要なトピックの語彙をフィルタリングすることができます.比較的強力です.

1.2データ中の非テキスト部分の除去


このステップは主に爬虫類で収集した語彙データに対して、這い降りた内容にhtmlのラベルがたくさんあるので、削除する必要があります.少量の非テキストコンテンツはPythonの正規表現(re)で直接削除でき,複雑なものはbeautifulsoupで除去できる.これらの非テキストの内容を除去すると,本格的なテキストの前処理が可能になる.

1.3中国語の符号化問題の処理


Python 2はunicodeの処理をサポートしていないため、Python 2を用いて中国語テキストの前処理を行う際には、記憶データをutf 8で読み出して中国語関連処理を行う際に、GBKなどの中国語符号化を用いることが原則である.
import jieba

for i in range(3):
    with open('./doc%d.txt'%(i+1), 'r', encoding="utf-8") as f1:
        document = f1.read()
        document_cut = jieba.cut(document)
        result = ' '.join(document_cut)
        print(result)
        f1.close()
        with open('./result%d.txt'%(i+1), 'w', encoding="utf-8") as f2:
            f2.write(result)
            f2.close()

or
import jieba

with open('./nlp_test0.txt') as f:
    document = f.read()
    
    document_decode = document.decode('GBK')
    document_cut = jieba.cut(document_decode)
    #print  ' '.join(jieba_cut)  // , , result 
    result = ' '.join(document_cut)
    result = result.encode('utf-8')
    with open('./nlp_test1.txt', 'w') as f2:
        f2.write(result)
f.close()
f2.close()

1.4中国語の分詞


よく使われる中国語の分詞ソフトはたくさんありますが、個人的には結巴分詞がお勧めです.インストールも簡単で、例えばPythonベースの「pip install jieba」でできます.

1.5無効語の導入


上で私たちが解析したテキストには、「着」、「和」などの無効な単語がたくさんあります.また、テキスト分析の際に導入したくない句読点もあります.そのため、削除する必要があります.これらの単語は停止語です.停止語がリソースにアップロードされました
with open('./ChineseStopWords.txt', 'r', encoding="utf-8") as f:
    line = f.read()
    line = line.split('","')
    f.close()

file_object = open('./stopwords.txt', 'w', encoding="utf-8")
for i in range(len(line)):
    file_object.write(line[i] + '
') file_object.close() with open('./stopwords.txt', 'r', encoding="utf-8") as f: lines = f.readlines() f.close() stopwords = [] for l in lines: stopwords.append(l.strip()) print(stopwords)

1.6特徴処理


ここではscikit−learnを用いて我々のテキスト特徴を処理することができ,テキストマイニング前処理の方向量子化とHash Trickでは,方向量子化とHash Trickの2つの特徴処理の方法について述べた.一方、方向量子化は、TF−IDFの特徴処理を継続して行うことができるため、最も一般的な方法である.テキストマイニング前処理のTF−IDFにおいても,TF−IDF特徴処理の方法について述べた.ここでは,scikit−learnのTfidfVectorizerクラスを用いてTF−IDF特性処理を行う.
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [res1,res2]
vector = TfidfVectorizer(stop_words=stpwrdlst)
tfidf = vector.fit_transform(corpus)
print(tfidf)

1.7分析モデルの構築


各テキストのTF−IDFの特徴ベクトルがあれば,これらのデータを用いて分類モデルを構築したり,クラスタリングモデルを構築したり,トピックモデルの解析を行ったりすることができる.例えば、私たちの上の2つのテキストは、2つの訓練サンプルです.このときの分類クラスタリングモデルは,以前に述べた非自然言語処理のデータ解析と変わらない.

2英語テキストマイニング前処理プロセス


2.1データ収集


この部分は英語と中国語が似ている.取得方法は一般的に2つあります.他の人が作ったコーパスと自分で爬虫類を使ってネット上で自分のコーパスデータを登ります.
1つ目の方法では、よく使われるテキストコーパスがネット上にたくさんあります.勉強するだけで、直接ダウンロードして使用することができますが、「deep learning」関連のコーパスのような特殊なテーマのコーパスであれば、この方法は通用しません.私たち自身が2つ目の方法で取得する必要があります.
2つ目の爬虫類の使用方法には、オープンソースツールが多く、一般的な爬虫類はbeautifulsoupを使用します.しかし、上記の「deep learning」に関連するコーパスのような特殊なコーパスデータが必要である場合は、トピック爬虫類(フォーカス爬虫類とも呼ばれる)で完了する必要があります.一般的にacheを使用します.acheでは、キーワードまたは分類アルゴリズムモデルを使用して、必要なトピックの語彙をフィルタリングすることができます.比較的強力です.

2.2データの非テキスト部分の除去


このステップは主に爬虫類で収集した語彙データに対して、這い降りた内容にhtmlのラベルがたくさんあるので、削除する必要があります.少量の非テキストコンテンツはPythonの正規表現(re)で直接削除でき,複雑なものはbeautifulsoupで除去できる.また、特殊な非英語文字(non-alpha)もあり、Pythonの正規表現(re)で削除することもできます.

2.3スペルチェック訂正


英語のテキストにスペルミスがある可能性があるため、一般的にスペルチェックが必要です.私たちが分析したテキストにスペルの問題がないと確信したら、このステップを省略することができます.
スペルチェックは、pyenchantクラスライブラリで一般的に完了します.pyenchantのインストールは簡単です.「pip install pyenchant」でいいです.
from enchant.checker import SpellChecker
chkr = SpellChecker("en_US")
chkr.set_text("Many peope likee to watch In the Name of People.")
for err in chkr:
	print ("ERROR:", err.word)

出力:
ERROR: peope ERROR: likee
間違いを見つけたら、私たちは自分で修正するかどうかを決めることができます.もちろん、pyenchantのwxSpellCheckerDialogクラスでダイアログボックスの形式で、無視するか、テキストの誤ったスペルを修正するか、すべて修正するかをインタラクティブに決定することもできます.興味があればpyenchantの公式ドキュメントを研究することができます.

2.4語幹抽出(stemming)と語形還元(lemmatization)


語幹抽出(stemming)と語型還元(lemmatization)は英語テキストの前処理の特色である.両者には共通点があります.つまり、語の元の形式を見つけることです.ただ**語幹抽出(stemming)はもっと急進的で、語幹を探している間に語幹ではない語幹を得ることができます.例えば「imaging」の語幹は「imag」であり、一つの語ではない.語形は原則的に保守的で、一般的には正しい語に復元できる語だけを処理します.**個人的には語幹抽出ではなく語型還元を使うのが好きです.
実際の応用では,nltkを用いて語幹抽出と語型還元が一般的である.nltkのインストールも簡単で、「pip install nltk」でいいです.ただ、nltkのコーパスをダウンロードする必要があります.次のコードで完了することができます.nltkはダイアログボックスをポップアップしてダウンロードする内容を選択します.コーパスのダウンロードを選択すればいいです.
import nltk
nltk.download()

nltkでは,語幹抽出の方法としてPorterStemmer,LancasterStemmerSnowballStemmerがある.個人おすすめSnowballStemmer.このクラスは多くの言語を処理することができます.もちろん、中国語を除いて.
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer("english") # Choose a language
stemmer.stem("countries") # Stem a word
 "countri", 。

一方,語型還元であれば,WordNetLemmatizerクラス,すなわちwordnet語形還元法を用いることが一般的である.
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
print(wnl.lemmatize('countries'))  
 "country", 。

実際の英語テキストマイニング前処理の場合はwordnetベースの語形復元を推奨すればよい.

2.5小文字に変換


英語の単語には大文字と小文字があるので、統計すると「Home」や「home」のような単語が期待されます.そのため、一般的にはすべての語を小文字に変換する必要があります.これはpythonのAPIで直接できます.
texts = [x.lower() for x in texts]

2.6停用語の導入


scikit-learnをフィーチャー処理する場合、パラメータstop_wordsは、無効なワードテーブルとして配列を導入します.
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [res1,res2]
vector = TfidfVectorizer(stop_words='english')
tfidf = vector.fit_transform(corpus)
from nltk.corpus import stopwords
stop_words = stopwords.words('english')

2.7特徴処理


ここではscikit−learnを用いて我々のテキスト特徴を処理することができ,テキストマイニング前処理の方向量子化とHash Trickでは,方向量子化とHash Trickの2つの特徴処理の方法について述べた.一方、方向量子化は、TF−IDFの特徴処理を継続して行うことができるため、最も一般的な方法である.テキストマイニング前処理のTF−IDFにおいても,TF−IDF特徴処理の方法について述べた.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import HashingVectorizer 
vectorizer2=HashingVectorizer(n_features = 6,norm = None)
print(vectorizer2.fit_transform(corpus))

2.8分析モデルの構築


各テキストのTF−IDFの特徴ベクトルがあれば,これらのデータを用いて分類モデルを構築したり,クラスタリングモデルを構築したり,トピックモデルの解析を行ったりすることができる.このときの分類クラスタリングモデルは,以前に述べた非自然言語処理のデータ解析と変わらない.