Greenniche commited on
Commit
5bc7200
1 Parent(s): 4d96cb3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -10
app.py CHANGED
@@ -1,23 +1,66 @@
1
  import gradio as gr
2
- import re
 
3
 
4
 
 
 
5
  def game_starts():
6
  return "星期天,你是一名侦探,小兔子被杀了,她的室友有三人。"
7
 
8
 
 
 
 
 
 
 
 
 
 
 
 
9
  def game(player_input):
10
  # 解析玩家输入
11
- if re.search("看|案情", player_input):
12
- return "小兔子被刺伤在胸口,现场找到一把锋利的刀。"
13
- elif re.search("查|室友", player_input):
14
- return "1.王某:晚上一直在家陪女友看电影。\
15
- 2.李某:说自己去了夜店,和朋友喝了一晚,但没有人能为他作证。\
16
- 3.张某:嫌疑人目击证言显示她在案发当晚凌晨在小兔子的房间里。"
17
- elif re.search("抓|凶手", player_input):
18
- return "恭喜你,成功找到了凶手并将 TA 抓获!"
 
 
 
 
 
 
 
 
19
  else:
20
- return "你的操作有误,请重新输入。"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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("输入操作指令:"),