从文本字符串中返回职位名称

0 投票
1 回答
42 浏览
提问于 2025-04-14 18:33
import pandas as pd
import spacy

file_path = "insurance_data.csv"
original_df = pd.read_csv(file_path)

def extract_job_title(user_input):
    
    user_input = user_input.lower()

    job_titles = original_df["job_title"].unique()
    for job_title in job_titles:
        if job_title.lower() in user_input:
            print(job_title)
            return job_title
        else:
            nlp = spacy.load("en_core_web_sm")

            doc = nlp(user_input)

            job_titles = [ent.text for ent in doc.ents if ent.label_ == "ORG" or ent.label_ == "TITLE"]

            if job_titles:
                print(job_titles)
                return job_titles[-1]
            else:
                print("Can't understand. Please provide a valid job title.")

user_input = 'i am a Doctor'
a = extract_job_title(user_input)
print(a)

我在使用Spacy这个工具来识别我数组中的职位名称时遇到了一个问题。看起来“医生”这个词没有被识别为有效的职位名称。你能不能给我推荐一个其他的职位名称,以便我能更准确地处理呢?

我希望能够找到职位名称,即使它不在我的数组里。

1 个回答

0

解释

我理解得对吗,original_df["job_title"].unique() 里没有“医生”这个职位吗?

ORG 是指“公司、机构、组织”等标签,所以它不是职位名称,而默认的实体标签里没有 TITLE 这个选项,除非你自己用自定义数据来训练。

根据 这个问题,现有的标签有:

['ORG', 'CARDINAL', 'DATE', 'GPE', 'PERSON', 'MONEY', 'PRODUCT', 'TIME', 'PERCENT', 'WORK_OF_ART', 'QUANTITY', 'NORP', 'LOC', 'EVENT', 'ORDINAL', 'FAC', 'LAW', 'LANGUAGE']

你可以在 这里 找到每个标签的描述,但这些标签里没有职位名称。这意味着你可能需要自己训练一个 EntityRecognizer。网上有很多相关的教程,但你当然需要准备训练数据。

其他问题

即使你的 spacy 代码能正常工作,把它放在循环里面运行会非常低效。把它移到循环外面,这样它只会在你检查完 job_titles 的存在性后运行一次。

撰写回答