Spaces:
Sleeping
Sleeping
Kota Takahashi
commited on
Commit
·
230209e
1
Parent(s):
c83d422
例外処理とspinnerを追加
Browse files- app.py +43 -28
- 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 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
|
|
|
|
|
|
|
|
48 |
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
result_word_similarity = word_similarity.calculate_similarity(search_word, article_keyword_list)
|
53 |
|
54 |
-
|
55 |
-
|
|
|
|
|
56 |
|
57 |
-
|
58 |
-
|
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 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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):
|
|
|
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 = {}
|