我在做NLP项目。我已经从简历中提取了关键字并将它们存储在列表中。另一个列表由我从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")电流输出
简历中的单词:方框,JSON数据中的单词: arduino,来自JSON数据的单词: arduino来自简历的单词: arduino,来自JSON的数据: arduino Word,来自JSON的数据: browser,来自JSON的数据:浏览器的单词:黑色,来自JSON的数据:黑色的单词,来自JSON的数据:地址,来自JSON的数据的单词: address Word : address,Word来自JSON的数据: address
我已经尝试了上面一种非常简单的技术,通过比较两个列表,这些列表只匹配准确的单词并打印出来。但是,我想要的是,如果两个列表中有任何匹配,例如,如果‘’与结果列表'apache server‘匹配,那么它应该作为输出打印出来: Word来自简历:,Word来自JSON数据: apache服务器。类似地,如果amazon匹配,那么它应该打印为输出: Word从简历: amazon,Word从JSON数据: amazon s3,
必需的输出:
来自简历的单词:,从简历中获得的单词: s3,来自JSON数据的单词:
有人能帮帮我吗。谢谢。
发布于 2021-01-04 00:46:27
我认为您试图实现的目标与简单的等式检查略有不同,即'azure' == 'azure bot service'将始终返回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中,则比较将返回true,但对于结果数组中的所有其他字符串,将返回false。
我还建议查看Does Python have a string 'contains' substring method?,寻找更复杂的子字符串匹配,因为您可能希望检查list_of_keys和results数组之间是否存在单词共存。
或者,您也可以查看模糊搜索,因为它似乎非常接近您的预期行为https://pypi.org/project/fuzzysearch/。
发布于 2021-01-04 00:43:24
不妨试试这个:
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']https://stackoverflow.com/questions/65556409
复制相似问题