我有一个列表如下:
item_list=['Manpower Service','Manpower Outsourcing','Healthcare Sanitation','Hiring
of Sanitation','Custom Bid For Services','Sanitation',
'Facility Management', 'Security Manpower Service']
并且有一个类似于的字符串
String_text="Manpower Outsourcing Services - Minimum Wage - Sem..."
这个字符串每次都会更改。我想要的是检查是否有任何列表项包含在字符串中,而我不知道该怎么做?有人能给我提个好办法吗?
请注意,这可能是一个NLP问题,但我的解决方案不是。
如果你打算检查列表中的成员是否在字符串中,那么应该非常直接。
[i for i in item_list if i in String_text]
... ['Manpower Outsourcing']
这将只保留字符串中的列表成员,但请注意,它将只保留";精确匹配";。
如果此输出不适合您的目的,则可能有其他几种方法可以进行检查。
将字符串中的成员标记为1,但将其他成员标记为0。
[1 if i in String_text else 0 for i in item_list]
... [0, 1, 0, 0, 0, 0, 0, 0]
或者,如果你想检查字符串中每个成员的数量,我建议将它们拆分。
item_list2 = [i.split(" ") for i in item_list]
[sum([1 if i in String_text else 0 for i in x])/len(x) for x in item_list2]
... [1.0, 1.0, 0.0, 0.0, 0.25, 0.0, 0.0, 0.6666666666666666]
你会注意到最后一个成员具有与前一个不同的输出;人力服务";以";人力;以及";服务";。您可以根据自己的目的选择合适的解决方案。
再次,请注意,这可能是一个NLP问题,我的解决方案只是愚蠢的字符串匹配。
我对"该字符串每次都改变";,但我希望下面的代码能解决你的问题。
[x for x in item_list if x in String_text]
执行此操作的最简单方法是循环遍历item_list
中的值,并使用in
关键字检查每个项是否在String_text
字符串中:
found = False
found_item = ""
for item in item_list:
found = item in String_text
if found:
found_item = item
break
print("Was item found: " + str(found))
if found:
print("Item Found: " + found_item)
下面是一个可以添加内容的示例。你可以尝试做一个for range循环(如下所示(。用if语句和";在";参数,它将检查列表当前索引中的字符串是否至少有一部分与该字符串匹配。
for i in range(0, len(item_list)):
# If the current list item matches the string, then it will print
# out what item in the list it matches with 'String_text'.
if item_list[i] in String_text:
print(f"'{item_list[i]}' in String_text")
注意:它不一定是"i",它可以是你想要的任何未使用的变量(例如"item"、"index"等(。我只是在这个例子中使用了"i"。还要注意,匹配字符串区分大小写。
我运行了代码,这是我得到的输出:
'Manpower Outsourcing' in String_text