【发布时间】:2020-11-06 13:46:29
【问题描述】:
我有问题。我正在尝试在字符串中查找设备名称。我要查找的所有设备名称都存储在一个列表中。我想要的有一件非常重要的事情:
- 一个命令可以有多个设备!!!
现在我遇到的问题是:
我有两个设备(Fan 和 Fan Light)。当我发出命令时:Turn on Fan Light 两个设备都已找到,但我只想找到 Fan Light。我尝试检查所有已找到的设备并将最长的设备设置为找到的设备,如下所示:
# Create 2 dummy devices
device1 = {
"name": "fan"
}
device2 = {
"name": "fan light"
}
# Add devices to list
devices = []
devices.append(device1)
devices.append(device2)
# Given command
command = "Turn on fan light"
foundDevices = []
# Search devices in sentence
for device in devices:
# Splits a device name if it has multiple words
deviceSplit = device["name"].split()
numOfSubNames = len(deviceSplit)
# Checks for every sub-name if it is found in the string
i = 0
for subName in deviceSplit:
if subName in command:
i += 1
# Checks if all names where located in string
if i == numOfSubNames:
foundDevices.append(device["name"])
# Checks if multiple devices have been found
if len(foundDevices) >= 2:
largestNameLength = 0
# Checks which device has the largest name
for device in foundDevices:
if (len(device) > largestNameLength):
largestName = device
largestNameLength = len(device)
# Clears list and only add longest one
foundDevices.clear()
foundDevices.append(largestName)
print(foundDevices)
但是当我说例如“打开风扇灯和风扇”时会出现问题,因为该命令确实包含多个设备。 如何以我想要的方式扫描设备?
【问题讨论】:
-
这个和实体识别有关,如果你不想那样的话,我建议你在粉丝词之后提供命令,比如
fan run或fan stop -
那么
"turn on the Fan Light, and also the fan"(不同大小写)的结果是什么? -
或者您可以识别所有匹配的位置,例如使用
find并丢弃子匹配,即包含在更大匹配中的设备。 -
结果:
"Turn on the Fan Light and the Fan"应该是:["Fan Light", "Fan"]
标签: python