<jupyter_start><jupyter_text>演習課題その1 ベクトル空間モデル情報学研究科　社会情報学専攻　社会情報モデル講座　田島研究室6930298362　修士1回　片岡 大祐  必須課題（1） 与えられたコーパスに対する検索の実現<jupyter_code>import json
with open("../data/kyoto_results_100.json", "r") as f:
    docs = json.load(f)
print("Num of docs = ", len(docs))
import numpy as np
import gensim
from nltk.corpus import stopwords
import pandas as pd
np.set_printoptions(precision=4)
corpus = [doc["bow"].split() for doc in docs]
# stopword 除去?
# corpus
dictionary = gensim.corpora.Dictionary(corpus)
#dictionary.token2id
id_corpus = [dictionary.doc2bow(document) for document in corpus]
#id_corpus[0]
tfidf_model = gensim.models.TfidfModel(id_corpus, normalize=False)
tfidf_corpus = tfidf_model[id_corpus]
tfidf_vectors = gensim.matutils.corpus2dense(tfidf_corpus, len(dictionary)).T
# tfidf_corpus[0]
#[(dictionary[x[0]], x[1]) for x in tfidf_corpus[0]]
from scipy.spatial.distance import cosine
def cosine_sim(v1, v2):
    #scipyのcosineは類似度ではなく距離関数のため， 1-コサイン距離　とすることで，コサイン類似度に変換する
    return 1.0 - cosine(v1, v2) 
queries = [{"京都"}, {"京都", "穴場"}, {"関西", "観光", "名所"}]
def rank_documents(query, tfidf_vectors):
    score_dic = {}
    tfidf_q = tfidf_model[dictionary.doc2bow(query)]  #クエリをtfidfベクトルに変換
    query_vector = gensim.matutils.corpus2dense([tfidf_q], len(dictionary)).T[0] #numpyのベクトルに変換
#     print ("q=", query_vector)
#     print(tfidf_vectors)
    for i, tfidf_vector in enumerate(tfidf_vectors):
        score_dic[i] = cosine_sim(query_vector, tfidf_vector)
    return score_dic
print([(dictionary[x[0]], x[1]) for x in tfidf_q1])
print("-----クエリ1:{}の実行結果-----\n".format(queries[0].strip("{}")))
score_dic = rank_documents(queries[0], tfidf_vectors)
for i, score in sorted(score_dic.items(), key=lambda x:x[1], reverse=True)[:10]:
    print("{0}: {1} [SCORE: {2}]\n".format(i+1, "".join(corpus[i]), score))
print("-----クエリ2:{}の実行結果-----\n".format(queries[1].strip("{}")))
score_dic = rank_documents(queries[1], tfidf_vectors)
for i, score in sorted(score_dic.items(), key=lambda x:x[1], reverse=True)[:10]:
    print("{0}: {1} [SCORE: {2}]\n".format(i+1, "".join(corpus[i]), score))
print("-----クエリ3:{}の実行結果-----\n".format(queries[2]))
score_dic = rank_documents(queries[2], tfidf_vectors)
for i, score in sorted(score_dic.items(), key=lambda x:x[1], reverse=True)[:10]:
    print("{0}: {1} [SCORE: {2}]\n".format(i+1, "".join(corpus[i]), score))<jupyter_output>-----クエリ3:関西 観光 名所の実行結果-----

1: 定番穴場おススメ京都観光...-NAVERまとめ関西住んいる作者おススメ京都観光名所まとめました定番穴場スポット随時まとめいきます是非京都観光参考し下さい [SCORE: nan]

2: 京都観光スポットランキングTOP10-らんnet京都おすすめ観光スポット1740ヶ所セレクト人気清水寺伏見稲荷大社口コミランキングご紹介京都周辺観光スポット探すなららんnet [SCORE: nan]

3: 京都府観光ガイド～京都府観光連盟公式サイト～。京都観光情報満載京都府観光連盟公式サイトスポットイベントエリアジャンルごと検索できます紅葉桜開花情報季節おすすめ温泉美術館幅広く掲載 [SCORE: nan]

4: 京都観光おすすめコースガイド|京都観光京都観光楽しむためサイトですおすすめコースエリア別テーマ別ガイドしいます庭園仏像ご利益さん歳時記解説しいます [SCORE: nan]

5: だ京都行こう～京都旅行観光スポット...。JR東海京都観光情報だ京都行こう公式サイト京都風景お寺神社イベントお祭りお食事お土産情報ご案内京都楽しくなる特集記事インタビュー [SCORE: nan]

6: 京都観光研究所|京都旅行おすすめコース名所スポット地図...。京都観光研究所名所穴場150ヶ所以上観光名所掲載しいます観光名所基本データはじめ周辺スポットアクセス方法京都旅行リピーター役立つ京都観光情報地図写真... [SCORE: nan]

7: 京都パーフェクトガイド京都観光.com本音語る京都観光案内おすすめ散策コース地図お土産珍しいお守り食事カフェ案内穴場定番いい所いい場所紹介します [SCORE: nan]

8: おすすめ京都観光コース|京都観光情報KYOTOdesign定番京都観光コース京都人知らないようなとっおきおすすめ観光コースいろいろなテーマ京都観光コースご紹介しいますそれぞれ立ち寄りスポット詳細な情報掲載しおります [SCORE: nan]

9: 公益社団法人京都市観光協会|KYOTOCITYTOURISM...。京都イベント祭事季節花宿泊食事体験買い物施設京都観光役立つ情報発信しいます...京夏旅定期観光バス特別コース運行中鮎塩焼き夏味覚特別公開巡る [SCORE: nan]

10: 京都[...]
{'fraction_non_alphanumeric': 0.15598227474150664, 'fraction_numerical': 0.026292466765140327, 'mean_word_length': 6.9670588235294115, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '220556', 'license': 'MIT', 'n_tokens_mistral': 2190, 'n_tokens_neox': 2233, 'n_words': 217, 'path': 'codes/.ipynb_checkpoints/Exercise1_Daisuke_Kataoka-checkpoint.ipynb', 'repo_name': 'dai39suke/iro_assignment', 'size': '3385'}