从文本字符串中返回职位名称
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
的存在性后运行一次。