基于模糊模糊理论的意图识别

2024-05-13 01:49:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的intent.json文件

{
  "intents": [
    {
      "tag": "greeting",
      "patterns": [
        "Hi",
        "How are you",
        "Is anyone there?",
        "Hello",
        "Good day"
      ],
      "responses": [
        "Hello"
      ],
      "context_set": ""
    },
    {
      "tag": "goodbye",
      "patterns": [
        "Bye",
        "not interested",
        "Goodbye"
      ],
      "responses": [
        "ok bye"
      ]
    },
    {
      "tag": "thanks",
      "patterns": [
        "Thanks",
        "Thank you"
      ],
      "responses": [
        "My pleasure"
      ]

    },
    {
      "tag": "greetiing_exchange",
      "patterns": [
        "What about you",
        "you",
        "how about your self"
      ],
      "responses": [
        "i am perfect, thanks for asking"
      ],
      "context_set": ""
    }
  ]
}

from fuzzywuzzy import process

    for intent in intents['intents']:
        Ratios = process.extract(message,intent['patterns'])
        for ratio in Ratios:
            highest_value = max(Ratios, key = lambda i : i[1])
            print(highest_value)

现在,我希望用户输入识别模式和输出响应

问题是,当我输入“hi”时,它并不是遍历每个模式。它的产量是 (‘嗨’,100) (“不感兴趣”,45) (“谢谢”,45) (“你呢”,45岁)

我想要在80到100范围内更高的模式,并打印该模式的响应

另一件事是有一个库Rhasspy,可以用于意图识别。我如何将该库用于此文件


Tags: 文件youhellofortagcontext模式responses
1条回答
网友
1楼 · 发布于 2024-05-13 01:49:08

使用process.extractOnescore_cutoff参数:

from fuzzywuzzy import process
import operator

ratios = []
for idx, intent in enumerate(intents['intents']):
    # ratio = process.extractOne(message, intent['patterns'], score_cutoff=80)
    # if ratio:
    #  - New in python 3.8: walrus operator  -
    if ratio := process.extractOne(message, intent['patterns'], score_cutoff=80):
        ratios.append((idx, ratio[0], ratio[1]))

responses = intents['intents'] \
                   [max(ratios, key=operator.itemgetter(2))[0]] \
                   ['responses'] if ratios else []
>>> responses
['Hello']

相关问题 更多 >