Kota Takahashi commited on
Commit
230209e
·
1 Parent(s): c83d422

例外処理とspinnerを追加

Browse files
Files changed (2) hide show
  1. app.py +43 -28
  2. cosine_similarity_calculator.py +3 -2
app.py CHANGED
@@ -39,35 +39,50 @@ if st.button('最新ニュース取得'):
39
  if st.session_state['news_fetched']:
40
  search_word = st.text_input('名詞', placeholder='名詞を入力してください', max_chars=10, help='10文字以内の名詞')
41
  if st.button('要約作成'):
42
- article_text_list = st.session_state['article_text_list']
43
- article_url_list = st.session_state['article_url_list']
44
- for temp_article_text, temp_article_url in zip(article_text_list, article_url_list):
45
- # TD-IDF値を計算
46
- vectorizer = JapaneseTextVectorizer()
47
- tfidf_dict = vectorizer.fit_transform(temp_article_text)
 
 
 
 
48
 
49
- # cos類似度を計算
50
- word_similarity = CosineSimilarityCalculator()
51
- article_keyword_list = list(tfidf_dict.keys())
52
- result_word_similarity = word_similarity.calculate_similarity(search_word, article_keyword_list)
53
 
54
- # None でない値のみを抽出
55
- filtered_data = {k: v for k, v in result_word_similarity.items() if v is not None}
 
 
56
 
57
- # 最大値を持つキーとその値を取得
58
- if filtered_data: # filtered_dataが空でないことを確認
59
- max_word = max(filtered_data, key=filtered_data.get)
60
- max_value = filtered_data[max_word]
61
- # 最大値がこれまでの最大値より大きければ更新
62
- if max_value > best_max_value:
63
- best_max_value = max_value
64
- best_max_word = max_word
65
- best_article_text = temp_article_text
66
- best_article_url = temp_article_url
67
 
68
- # テキストを要約
69
- summarizer = TextSummarizer()
70
- summary_text = summarizer.summarize(best_article_text, max_length=40, min_length=20)
71
- st.write(f'最も類似度が高いワードは「{best_max_word}」でした')
72
- st.write(f'url:{best_article_url}')
73
- st.text_area("要約:", summary_text, height=20)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  if st.session_state['news_fetched']:
40
  search_word = st.text_input('名詞', placeholder='名詞を入力してください', max_chars=10, help='10文字以内の名詞')
41
  if st.button('要約作成'):
42
+ if search_word.strip() == '':
43
+ st.error('名詞を入力してください。')
44
+ elif len(search_word) > 10:
45
+ st.error('名詞は10文字以内で入力してください。')
46
+ else:
47
+ with st.spinner('ニュースの要約を作成中...'):
48
+ article_text_list = st.session_state['article_text_list']
49
+ article_url_list = st.session_state['article_url_list']
50
+ try:
51
+ for temp_article_text, temp_article_url in zip(article_text_list, article_url_list):
52
 
53
+ # TF-IDF値を計算
54
+ vectorizer = JapaneseTextVectorizer()
55
+ tfidf_dict = vectorizer.fit_transform(temp_article_text)
 
56
 
57
+ # cos類似度を計算
58
+ word_similarity = CosineSimilarityCalculator()
59
+ article_keyword_list = list(tfidf_dict.keys())
60
+ result_word_similarity = word_similarity.calculate_similarity(search_word, article_keyword_list)
61
 
62
+ if result_word_similarity is None:
63
+ raise ValueError("類似度計算結果がNoneです。名詞を変更して再度試してください。")
 
 
 
 
 
 
 
 
64
 
65
+ # None でない値のみを抽出
66
+ filtered_data = {k: v for k, v in result_word_similarity.items() if v is not None}
67
+
68
+ # 最大値を持つキーとその値を取得
69
+ if filtered_data: # filtered_dataが空でないことを確認
70
+ max_word = max(filtered_data, key=filtered_data.get)
71
+ max_value = filtered_data[max_word]
72
+ # 最大値がこれまでの最大値より大きければ更新
73
+ if max_value > best_max_value:
74
+ best_max_value = max_value
75
+ best_max_word = max_word
76
+ best_article_text = temp_article_text
77
+ best_article_url = temp_article_url
78
+ is_similarity_computed = True # 類似度が計算されていれば、フラグをTrueにする
79
+
80
+ # テキストを要約
81
+ summarizer = TextSummarizer()
82
+ summary_text = summarizer.summarize(best_article_text, max_length=40, min_length=20)
83
+ st.write(f'最も類似度が高いワードは「{best_max_word}」でした')
84
+ st.write(f'url:{best_article_url}')
85
+ st.text_area("要約:", summary_text, height=20)
86
+
87
+ except ValueError as ve:
88
+ st.error(f"エラー: {ve.args[0]}")
cosine_similarity_calculator.py CHANGED
@@ -46,18 +46,19 @@ class CosineSimilarityCalculator:
46
  def calculate_similarity(self, search_word, article_keyword_list):
47
  """
48
  指定された検索ワードと記事のキーワードリストの間のコサイン類似度を計算
 
49
 
50
  Parameters:
51
  - search_word (str): 検索ワード
52
  - article_keyword_list (list): 記事のキーワードリスト
53
  Returns:
54
- - similarities (dict): 記事キーワードとそれぞれの検索ワードのコサイン類似度を含む辞書を作成し、モデルにない単語の場合はNoneを返す
 
55
  """
56
  # 検索ワードの埋め込みベクトルを取得
57
  if search_word in self.model.wv:
58
  search_embedding = self.model.wv[search_word]
59
  else:
60
- print(f"{search_word} は本モデルの語彙にありません。")
61
  return None
62
 
63
  similarities = {}
 
46
  def calculate_similarity(self, search_word, article_keyword_list):
47
  """
48
  指定された検索ワードと記事のキーワードリストの間のコサイン類似度を計算
49
+ モデルにない単語の場合はエラーメッセージを出力しブレイクする
50
 
51
  Parameters:
52
  - search_word (str): 検索ワード
53
  - article_keyword_list (list): 記事のキーワードリスト
54
  Returns:
55
+ - similarities (dict): 記事キーワードとそれぞれの検索ワードのコサイン類似度を含む辞書を作成。
56
+ モデルにない単語の場合はNoneを返す
57
  """
58
  # 検索ワードの埋め込みベクトルを取得
59
  if search_word in self.model.wv:
60
  search_embedding = self.model.wv[search_word]
61
  else:
 
62
  return None
63
 
64
  similarities = {}