首页 > 解决方案 > 将单词列表与职位描述列表匹配python的最佳方法

问题描述

这是我的问题(我正在研究 python):我有一个带有列的数据框:Index(['job_title', 'company', 'job_label', 'description'], dtype='object')

我有一个包含 300 个技能的单词列表:

keywords = ["C++","Data Analytics","python","R", ............ "Django"] 

我需要将这些关键字与每个职位描述相匹配,并获得一个新的数据框,说明 C++ 在职位描述[0]中是真还是假...职位描述[1]、职位描述[2]等等。

我的新数据框将是:

列:['job_title'、'company'、'description'、“C++”、“Data Analytics”、.......“Django”]

如果每列关键字在职位描述中匹配(找到)或不匹配,则表示对或错。

可能还有另一种构建数据框的方法(我正在听取建议)。

希望我的问题很清楚。我尝试了正则表达式,但我无法让它遍历每一行,我尝试使用“fnmatch”库进行循环,但我无法让它工作。迄今为止最好的方法是:

df["microservice"]= df.description.str.contains("microservice") 

df["cloud-based architecture"] = df.description.str.contains("cloud-based architecture")

df["service oriented architecture"] = df.description.str.contains("service oriented architecture")

但是,首先我无法让它循环遍历描述列的每一行,所以我必须为每个单词输入 300 倍的代码(这没有意义)。其次,通过这种方式,我遇到了诸如“R”之类的几个单词的问题,因为它在每个描述中都找到了字母 R,所以它在每个描述中都会拉真。

标签: pythonpandas

解决方案


遍历关键字列表并从描述中提取每一列:

for name in keywords:
    df[name] = df['description'].apply(lambda x: True if name in x else False)

编辑

这并不能解决 R 的问题。为此,您可以添加一个空格以确保它是隔离的,因此代码将是:

for name in keywords:
    df[name] = df['description'].apply(lambda x: True if ' '+str(name)+' ' in x else False)

但这真的很丑陋而且没有优化。正则表达式应该可以解决问题,但我必须回顾一下:找到了![ ]*+[str(name)]+[.?!] 更好!(更合适)


推荐阅读