import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import nltk
インプットファイルAとBを読み込む
file_a = pd.read_csv('input_file_a.csv')
file_b = pd.read_csv('input_file_b.csv')
1列目のデータをリストに変換
list_a = file_a.iloc[:, 0].tolist()
list_b = file_b.iloc[:, 0].tolist()
バイグラムのベクトル化を行う関数
def ngram_vectorizer(text_list, ngram_range=(2, 2)):
vectorizer = CountVectorizer(ngram_range=ngram_range, analyzer='char')
X = vectorizer.fit_transform(text_list)
return X, vectorizer
list_aとlist_bを合わせてバイグラムでベクトル化
combined_list = list_a + list_b
X, vectorizer = ngram_vectorizer(combined_list)
list_aとlist_bに対応するベクトルを分離
X_a = X[:len(list_a)]
X_b = X[len(list_a):]
コサイン類似度を計算
cosine_similarities = cosine_similarity(X_a, X_b)
名寄せの結果を格納するリスト
matches = []
list_aの各文字列に対して、list_bの最も類似した文字列を見つける
for i, string_a in enumerate(list_a):
similarity_scores = cosine_similarities[i]
best_match_index = similarity_scores.argmax()
best_match_string = list_b[best_match_index]
best_similarity_score = similarity_scores[best_match_index]
matches.append((string_a, best_match_string, best_similarity_score))
結果をデータフレームに変換
matches_df = pd.DataFrame(matches, columns=['String A', 'Best Match in B', 'Similarity'])
結果をCSVファイルに保存
matches_df.to_csv('matched_results.csv', index=False)
print("名寄せの結果が'matched_results.csv'に保存されました。")