jd = "looking for Hadoop Developer Good knowledge of SAP Workflow and SAP HANA"
tech=['hadoop developer','sap workflow','sap hana']
string_split = jd.split()
matched = set(jd) & set(tech)
output:
matched
Out[9]: set()
如何打印匹配的两个单词,例如:
hadoop developer,sap hana,sap workflow
答案 0 :(得分:1)
简单的列表理解将起作用。这样做的关键是迫使jd
降低,否则将无法正确匹配。
[i for i in tech if i in jd.lower()]
['hadoop developer', 'sap workflow', 'sap hana']
答案 1 :(得分:1)
您还可以在此处使用re.findall
import re
print(re.findall("|".join(tech), jd.lower()))
#['hadoop developer', 'sap workflow', 'sap hana']
|
字符是正则表达式语法中的OR运算符。我们使用它来加入tech
中的术语。然后findall
将返回字符串中该模式的所有匹配项。
默认情况下,这是区分大小写的,但是如果您不想使输入字符串小写,则可以添加IGNORECASE
标志。
re.findall("|".join(tech), jd, flags=re.IGNORECASE)
#['Hadoop Developer', 'SAP Workflow', 'SAP HANA']
答案 2 :(得分:0)
执行此操作的最佳方法取决于您的数据。如果您的 tech 列表中只有很少的项目,那么@pault解决方案将满足您的需求(但是我建议在模式中添加单词边界,以避免误报),但是如果您有很多项目,则可以玩游戏。
您必须构建所有两个单词序列的集合,然后从技术列表中找到它与集合之间的交集。
要查找 jd 中两个单词的所有序列,我在超前断言内使用捕获组。由于先行不消耗字符,因此该模式能够找到两个单词的所有重叠序列:寻找, hadoop , hadoop开发人员,...开头的\b
和第二个\w
的贪婪量词可确保匹配项仅包含整个单词,而不包含单词的一部分。
import re
jd = "looking for Hadoop Developer Good knowledge of SAP Workflow and SAP HANA"
tech=['hadoop developer','sap workflow','sap hana']
two_words = re.findall('\b(?=(\w+\W*\w+))', jd.lower())
print(','.join(list(set(two_words) ^ set(tech))))