我想让两个词连接起来. 到目前为止,一次只能管理1个单词



我正在制作一个AI系统,该系统将在给定输入时进行回复。发生这种情况是因为给出的问题具有系统想要的单词。我的问题是,如何组合两个单词才能被检测到?到目前为止,我只设法得到了一个词。

input_ls = user_input.split(" ")
processor = {
"buy":False,
"sell":False,
"store":[],
"general":False,
"dict":False,
"dict_lookup":[]
}
for w in input_ls:
w = w.lower() # force capital letter into small letter
if w in ["buy", "get", "ok"]:
processor["buy"] = True

您可以使用sum简单地计算字符串中存在的单词数:

>>> text = "buy this product"
>>> sum(1 for w in ["buy", "get", "ok"] if w in text)
1
>>> text = "buy this product. ok"
>>> sum(1 for w in ["buy", "get", "ok"] if w in text)
2

并检查计数是否大于或等于 2:

>>> sum(1 for w in ["buy", "get", "ok"] if w in text) >= 2
True

另一种更有效的替代方法是计算两个集合的交集。所需的单词和句子中的单词:

>>> set(text.lower().split())
{'buy', 'ok', 'product.', 'this'}
>>> set(text.lower().split()) & set(["buy", "get", "ok"])
{'buy', 'ok'}

我会在input_ls和要检测的单词列表之间做一个列表交集 然后迭代相交列表以设置处理器的值。

input_ls = user_input.split(" ")
processor = {
...
}
to_detect = ["buy", "get", "ok"]
intersect = list(set(input_ls) & set(to_detect))
for key in intersect:
processor[key] = True

不要忘记解决大写字母等,例如,通过提前迭代输入并将值设置为 lower() 或使用 lambda。

这是我对解决方案的看法...

  1. 逻辑单词分组到字典中的元组中,以便当这些单词出现在句子中时,很容易识别 AI 系统给出的答案。
  2. 应创建 2 字典。processor字典,其中包含相关的单词对,processorAnswers包含与这些单词相关的答案。
  3. 去除给定句子的标点符号(例如comma等;你可以有一个方法从输入字符串中删除所有可能的标点符号),小写并用空格拆分它
  4. 循环访问processor字典,并以元组形式标记单词的出现次数。计数 可以忽略多次出现的单词,就像我所做的那样(可选)。
  5. 最后找到句子中出现的一对单词,并显示字典中这些单词的相关答案processorAnswers

注意:如果句子中出现多对单词,那么为了解决应该将哪个答案返回给用户,我们应该合并单词多次出现的计数,并返回单词命中率最大的元组(基本上是元组中出现的总和)。


user_input = input("What is your question?")
input_ls = user_input.replace(",", "").lower().split(" ")
processor = {
("buy", "sell"):(0,0),
("general", "dict"):(0,0)
}
processorAnswers = {
("buy", "sell"):"Welcome to buy and sell",
("general", "dict"):"This is general dictionary"
}
for pairs in processor.keys():
if processor[pairs] != (1,1):
if pairs[0] in input_ls and list(processor[pairs])[0] != 1:
listTuple = list(processor[pairs])
listTuple[0] = 1
processor[pairs] = tuple(listTuple)
if pairs[1] in input_ls and list(processor[pairs])[1] != 1:
listTuple = list(processor[pairs])
listTuple[1] = 1
processor[pairs] = tuple(listTuple)
print(processor)
print("Answer is: ")
for pairs in processor.keys():
if processor[pairs] == (1,1):
print(processorAnswers[pairs])

示例运行

========== RESTART: C:/loop.py ==========
What is your question?why buy sell sell buy sell buy general gene
{('buy', 'sell'): (1, 1), ('general', 'dict'): (1, 0)}
Answer is: 
Welcome to buy and sell

不止一个回答可能的情况:

注意:您可以随心所欲地解决领带问题。

user_input = input("What is your question?")
input_ls = user_input.replace(",", "").lower().split(" ")
processor = {
("buy", "sell"):(0,0),
("general", "dict"):(0,0)
}
processorAnswers = {
("buy", "sell"):"Welcome to buy and sell",
("general", "dict"):"This is general dictionary"
}
for pairs in processor.keys():
if pairs[0] in input_ls:
listTuple = list(processor[pairs])
listTuple[0] = input_ls.count(pairs[0])
processor[pairs] = tuple(listTuple)
if pairs[1] in input_ls:
listTuple = list(processor[pairs])
listTuple[1] = input_ls.count(pairs[1])
processor[pairs] = tuple(listTuple)
print(processor)
maxHits = 0
maxHitTuple = ()
for pairs in processor.keys():
listTuple = list(processor[pairs])
if (listTuple[0] > 0 and listTuple[1] > 0 and ((listTuple[0] + listTuple[1]) > maxHits)):
maxHits = listTuple[0] + listTuple[1]
maxHitTuple = pairs
print("Best Answer is: " + processorAnswers[maxHitTuple])

示例运行:

What is your question?why buy sell buy sell general general general general general general
{('buy', 'sell'): (2, 2), ('general', 'dict'): (6, 0)}
Best Answer is: Welcome to buy and sell

最新更新