Spaces:
Runtime error
Runtime error
Greenniche
commited on
Commit
•
5bc7200
1
Parent(s):
4d96cb3
Update app.py
Browse files
app.py
CHANGED
@@ -1,23 +1,66 @@
|
|
1 |
import gradio as gr
|
2 |
-
import
|
|
|
3 |
|
4 |
|
|
|
|
|
5 |
def game_starts():
|
6 |
return "星期天,你是一名侦探,小兔子被杀了,她的室友有三人。"
|
7 |
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
def game(player_input):
|
10 |
# 解析玩家输入
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
else:
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
iface = gr.Interface(game,
|
23 |
inputs=gr.inputs.Textbox("输入操作指令:"),
|
|
|
1 |
import gradio as gr
|
2 |
+
import spacy
|
3 |
+
import textdistance
|
4 |
|
5 |
|
6 |
+
nlp = spacy.load("en_core_web_sm")
|
7 |
+
|
8 |
def game_starts():
|
9 |
return "星期天,你是一名侦探,小兔子被杀了,她的室友有三人。"
|
10 |
|
11 |
|
12 |
+
def extract_command(doc):
|
13 |
+
for ent in doc.ents:
|
14 |
+
if ent.label_ == "COMMAND":
|
15 |
+
return ent.text.lower()
|
16 |
+
|
17 |
+
|
18 |
+
def get_best_match(input_text, options):
|
19 |
+
distances = {option: textdistance.jaro_winkler.similarity(input_text, option) for option in options}
|
20 |
+
return max(distances, key=distances.get)
|
21 |
+
|
22 |
+
|
23 |
def game(player_input):
|
24 |
# 解析玩家输入
|
25 |
+
doc = nlp(player_input)
|
26 |
+
|
27 |
+
command = extract_command(doc)
|
28 |
+
|
29 |
+
if command:
|
30 |
+
# 匹配已知的操作指令
|
31 |
+
if command in ["看", "案情"]:
|
32 |
+
return "小兔子被刺伤在胸口,现场找到一把锋利的刀。"
|
33 |
+
elif command in ["查", "室友"]:
|
34 |
+
return "1.王某:晚上一直在家陪女友看电影。\
|
35 |
+
2.李某:说自己去了夜店,和朋友喝了一晚,但没有人能为他作证。\
|
36 |
+
3.张某:嫌疑人目击证言显示她在案发当晚凌晨在小兔子的房间里。"
|
37 |
+
elif command in ["抓", "凶手"]:
|
38 |
+
return "恭喜你,成功找到了凶手并将 TA 抓获!"
|
39 |
+
else:
|
40 |
+
return "你的操作有误,请重新输入。"
|
41 |
else:
|
42 |
+
# 没有明确的操作指令,我们会尝试从包含关键词的短语中获得更多的线索
|
43 |
+
search_phrases = {ent.text.lower() for ent in doc.ents if ent.label_ == "SEARCH_PHRASE"}
|
44 |
+
if search_phrases:
|
45 |
+
# 获取受支持的搜索短语列表
|
46 |
+
keyword_lists = {
|
47 |
+
"看": ["案情", "现场", "凶器", "证人"],
|
48 |
+
"查": ["室友", "目击证言"],
|
49 |
+
"抓": ["凶手", "嫌疑人", "线索"]
|
50 |
+
}
|
51 |
+
options = []
|
52 |
+
|
53 |
+
for command, keywords in keyword_lists.items():
|
54 |
+
for keyword in keywords:
|
55 |
+
phrase = f"{command}{keyword}"
|
56 |
+
options.append(phrase)
|
57 |
+
|
58 |
+
# 获取与搜索短语最匹配的操作指令
|
59 |
+
best_match = get_best_match(" ".join(search_phrases), options)
|
60 |
+
return f"您的操作指令可能是:{best_match}。"
|
61 |
+
else:
|
62 |
+
return "您的操作有误,请重新输入。"
|
63 |
+
|
64 |
|
65 |
iface = gr.Interface(game,
|
66 |
inputs=gr.inputs.Textbox("输入操作指令:"),
|