Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -49,6 +49,7 @@ if __name__ == "__main__":
|
|
| 49 |
|
| 50 |
# New codes to be tested
|
| 51 |
|
|
|
|
| 52 |
import streamlit as st
|
| 53 |
from transformers import pipeline
|
| 54 |
from langdetect import detect
|
|
@@ -132,6 +133,103 @@ def main():
|
|
| 132 |
|
| 133 |
if __name__ == "__main__":
|
| 134 |
main()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
|
| 136 |
|
| 137 |
|
|
|
|
| 49 |
|
| 50 |
# New codes to be tested
|
| 51 |
|
| 52 |
+
'''
|
| 53 |
import streamlit as st
|
| 54 |
from transformers import pipeline
|
| 55 |
from langdetect import detect
|
|
|
|
| 133 |
|
| 134 |
if __name__ == "__main__":
|
| 135 |
main()
|
| 136 |
+
'''
|
| 137 |
+
|
| 138 |
+
|
| 139 |
+
# V3
|
| 140 |
+
# Improve speed and user experience
|
| 141 |
+
|
| 142 |
+
import streamlit as st
|
| 143 |
+
from transformers import pipeline
|
| 144 |
+
from langdetect import detect
|
| 145 |
+
|
| 146 |
+
# 加载翻译pipeline
|
| 147 |
+
@st.cache_resource
|
| 148 |
+
def load_translation_pipeline():
|
| 149 |
+
return pipeline("translation", model="facebook/m2m100_418M")
|
| 150 |
+
|
| 151 |
+
# 加载情感分析pipeline
|
| 152 |
+
@st.cache_resource
|
| 153 |
+
def load_sentiment_pipeline():
|
| 154 |
+
return pipeline("sentiment-analysis", model="Rocky080808/finetuned-roberta-base")
|
| 155 |
+
|
| 156 |
+
# 定义语言映射
|
| 157 |
+
language_name_map = {
|
| 158 |
+
'zh-cn': "Chinese (Simplified)",
|
| 159 |
+
'zh-tw': "Chinese (Traditional)",
|
| 160 |
+
'ja': "Japanese",
|
| 161 |
+
'de': "German",
|
| 162 |
+
'es': "Spanish",
|
| 163 |
+
'fr': "French"
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
def translate_to_english(text, translation_pipeline):
|
| 167 |
+
# 检测语言
|
| 168 |
+
detected_language = detect(text)
|
| 169 |
+
|
| 170 |
+
# 语言映射
|
| 171 |
+
language_map = {
|
| 172 |
+
'zh-cn': "zh",
|
| 173 |
+
'zh-tw': "zh",
|
| 174 |
+
'ja': "ja",
|
| 175 |
+
'de': "de",
|
| 176 |
+
'es': "es",
|
| 177 |
+
'fr': "fr"
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
if detected_language not in language_map:
|
| 181 |
+
return None, "Unsupported language"
|
| 182 |
+
|
| 183 |
+
# 翻译到英语
|
| 184 |
+
translated_text = translation_pipeline(text, src_lang=language_map[detected_language], tgt_lang="en")
|
| 185 |
+
|
| 186 |
+
return translated_text[0]['translation_text'], language_name_map.get(detected_language, detected_language)
|
| 187 |
+
|
| 188 |
+
# 主程序逻辑
|
| 189 |
+
def main():
|
| 190 |
+
# 加载模型
|
| 191 |
+
translation_pipeline = load_translation_pipeline()
|
| 192 |
+
sentiment_pipeline = load_sentiment_pipeline()
|
| 193 |
+
|
| 194 |
+
st.title("Global Customer Sentiment Analyzer")
|
| 195 |
+
st.write("Analyze customer sentiment in multiple languages including Chinese, Japanese, German, Spanish, and French.")
|
| 196 |
+
|
| 197 |
+
user_input = st.text_input("Enter customer comments in supported languages:")
|
| 198 |
+
|
| 199 |
+
# 用户点击分析按钮后触发
|
| 200 |
+
if st.button("Analyze"):
|
| 201 |
+
if user_input:
|
| 202 |
+
# 翻译
|
| 203 |
+
translated_text, detected_language = translate_to_english(user_input, translation_pipeline)
|
| 204 |
+
|
| 205 |
+
if detected_language == "Unsupported language":
|
| 206 |
+
st.write("The input language is not supported. Please use Chinese, Japanese, German, Spanish, or French.")
|
| 207 |
+
else:
|
| 208 |
+
# 显示检测语言和翻译结果
|
| 209 |
+
st.write(f"Detected language: {detected_language}")
|
| 210 |
+
st.write(f"Translated Text: {translated_text}")
|
| 211 |
+
|
| 212 |
+
# 情感分析
|
| 213 |
+
result = sentiment_pipeline(translated_text)
|
| 214 |
+
label_str = result[0]["label"]
|
| 215 |
+
label = int(label_str.split("_")[-1])
|
| 216 |
+
confidence = result[0]["score"]
|
| 217 |
+
|
| 218 |
+
# 情感结果映射
|
| 219 |
+
label_to_text = {
|
| 220 |
+
0: "Very dissatisfied, immediate follow-up is required.",
|
| 221 |
+
1: "Dissatisfied, please arrange follow-up.",
|
| 222 |
+
2: "Neutral sentiment, further case analysis is needed.",
|
| 223 |
+
3: "Satisfied, the customer may return for a purchase.",
|
| 224 |
+
4: "Very satisfied, the customer is very likely to return and recommend."
|
| 225 |
+
}
|
| 226 |
+
sentiment_text = label_to_text.get(label, "Unrecognized sentiment")
|
| 227 |
+
|
| 228 |
+
st.write(f"Sentiment Analysis Result: {sentiment_text}")
|
| 229 |
+
st.write(f"Confidence Score: {confidence:.2f}")
|
| 230 |
+
|
| 231 |
+
if __name__ == "__main__":
|
| 232 |
+
main()
|
| 233 |
|
| 234 |
|
| 235 |
|