Memo

メモ > 技術 > プログラミング言語: Python > scikit-learn(機械学習)で言語を判定

■scikit-learn(機械学習)で言語を判定
利用されている文字コードが異なる言語を判定
import numpy as np from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score # Unicodeのコードポイント頻度測定 def count_codePoint(str): # Unicodeのコードポイントをアドレスとする配列を用意 counter = np.zeros(65535) for i in range(len(str)): # 各文字をUnicodeのコードポイントに変換 code_point = ord(str[i]) if code_point > 65535 : continue # 対応するアドレスの出現回数をインクリメント counter[code_point] += 1 # 各要素を文字数で割って正規化 counter = counter/len(str) return counter # 学習用データの準備 ja_str = 'これは日本語の文章です。' en_str = 'This is English Sentences.' th_str = '(タイ語の文章)' x_train = [count_codePoint(ja_str),count_codePoint(en_str),count_codePoint(th_str)] y_train = ['ja','en','th'] # 学習する clf = GaussianNB() clf.fit(x_train, y_train) # 評価用データの準備 ja_test_str = 'こんにちは' en_test_str = 'Hello' th_test_str = '(タイ語の文章)' x_test = [count_codePoint(en_test_str),count_codePoint(th_test_str),count_codePoint(ja_test_str)] y_test = ['en', 'th', 'ja'] # 評価する y_pred = clf.predict(x_test) print(y_pred) print("正解率 = " , accuracy_score(y_test, y_pred))
利用されている文字コードが同じ言語を判定 あらかじめ以下のファイルを用意しておく de, en , es からはじまるファイルの内容は、それぞれドイツ語、英語、スペイン語の内容にしておく train/de_cat.txt train/de_dog.txt train/de_elephant.txt train/en_cat.txt train/en_dog.txt train/en_elephant.txt train/es_cat.txt train/es_dog.txt train/es_elephant.txt test/de_lion.txt test/en_lion.txt test/es_lion.txt
import numpy as np from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score import glob # Unicodeのコードポイント頻度測定 def count_codePoint(str): # Unicodeのコードポイントをアドレスとする配列を用意 counter = np.zeros(65535) for i in range(len(str)): # 各文字をUnicodeのコードポイントに変換 code_point = ord(str[i]) if code_point > 65535 : continue # 対応するアドレスの出現回数をインクリメント counter[code_point] += 1 # 各要素を文字数で割って正規化 counter = counter/len(str) return counter # 学習データの準備 index = 0 x_train = [] y_train = [] for file in glob.glob('./train/*.txt'): # 言語情報の取得し、ラベルに設定 y_train.append(file[8:10]) # ファイル内の文字列を連結後、Unicodeのコードポイント頻度測定し、入力データに設定 file_str = '' for line in open(file, 'r'): file_str = file_str + line x_train.append(count_codePoint(file_str)) # 学習する clf = GaussianNB() clf.fit(x_train, y_train) # 評価データの準備 index = 0 x_test = [] y_test = [] for file in glob.glob('./test/*.txt'): # 言語情報の取得し、ラベルに設定 y_test.append(file[7:9]) # ファイル内の文字列を連結後、Unicodeのコードポイント頻度測定し、入力データに設定 file_str = '' for line in open(file, 'r'): file_str = file_str + line x_test.append(count_codePoint(file_str)) # 評価する y_pred = clf.predict(x_test) print(y_pred) print("正解率 = " , accuracy_score(y_test, y_pred))

Advertisement