Python 两个列表的比较

Python Comparison of Two lists

我正在做 NLP 项目。我已经从 Resume 中提取关键字并将它们存储在列表中。另一个列表包含我从 JSON 中提取的所有技术关键词。两个列表都包含很多关键字,以下仅供参考。

list_of_keys=['azure', 'job', 'matlab', 'javascript', 'http', 'android', 'amazon', 'apache spark']

result=['apache http server', 'angularjs', 'azure bot service', 'amazon s3', 'android sdk', 'android studio', 'amazon cloudfront']

代码:

with open('rawtext.json','r', encoding='utf-8') as f:
    data = json.load(f)
result = [x["name"].replace("@", " ").lower() for x in data]
print(result)

print ("List of Matched Keywords are:\n")
# Comparing Lists

for item in list_of_keys: 
    for item1 in result: 
        if item == item1: 
            print("Word from Resume: ", item, ", Word from JSON data: ", item1)
print ("****************\n")

当前输出

简历中的单词:box,JSON 数据中的单词:box 简历中的单词:arduino,JSON 数据中的单词:arduino 简历中的单词:arduino,JSON 数据中的单词:arduino 简历中的词:浏览器,JSON 数据中的词:浏览器 简历中的单词:黑色,JSON 数据中的单词:黑色 简历中的单词:地址,JSON 数据中的单词:地址 简历中的单词:地址,JSON 数据中的单词:地址

我在上面尝试了一种非常简单的技术,方法是比较两个只匹配精确单词并打印它们的列表。但是,我想要的是两个列表中是否存在任何匹配项,例如,如果 'apache spark' 与结果列表 'apache http server' 匹配 然后它应该打印为输出:来自简历的单词:apache spark,来自 JSON 数据的单词:apache http 服务器。同样,如果 amazon 匹配,那么它应该作为输出打印:Word from Resume: amazon, Word from JSON data: amazon s3, amazon cloudfront

要求输出:

简历中的单词:apache spark,JSON 数据中的单词:apache http 服务器 简历中的词:亚马逊,JSON 数据中的词:amazon s3,amazon cloudfront 简历中的单词:http,来自 JSON 数据中的单词:apache http 服务器

有人可以帮帮我吗?谢谢。

也许试试这个:

common = list(set(list_of_keys) & set(result))

例如:

list_of_keys = ['one','two','three','some more']
result = ['two','some more']

common = list(set(list_of_keys) & set(result))

print (common)

输出:

['two', 'some more']

我认为您要实现的目标与简单的相等性检查有点不同,即 'azure' == 'azure bot service' 将始终 return False.

比较检查可以更复杂,但根据您的预期行为,我相信您正在寻找这个:

from collections import defaultdict

res_dict = defaultdict(list)
for item in list_of_keys: 
    for item1 in result: 
        if item in item1:
            res_dict[item].append(item1)

for k,v in res_dict.items():
    print("Word from Resume: ", k, ", Word from JSON data: ", ",".join(v))
print ("****************\n")

我用 in 检查替换了 = 检查,这意味着如果 azure 出现在 azure bot service 中,比较将 return 为真但对于结果数组中的所有其他字符串 return false。

我还建议查看 Does Python have a string 'contains' substring method? 以获得更复杂的子字符串匹配,因为您可能正在寻找检查词是否在 list_of_keysresults 数组之间同时出现。

或者,您也可以查看模糊搜索,因为它看起来非常接近您的预期行为https://pypi.org/project/fuzzysearch/