0
0

ok

Posted at

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'に保存されました。")

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0