从句子python(波斯文本)中提取名字和姓氏的最佳方法

Posted

技术标签:

【中文标题】从句子python(波斯文本)中提取名字和姓氏的最佳方法【英文标题】:best way to extract the first-name and last-name from sentence python (Persian text) 【发布时间】:2022-01-21 00:17:52 【问题描述】:

我有超过 20,000 名和姓氏,我想检查该句子中是否有我的 first-namelast-namedataset,这是我的 dataset

l-name   f-name  
میلاد  جورابلو
علی    احمدی
امیر    احمدی

这是sentence 示例

sentence = 'امروز با میلاد احمدی رفتم بیرون'

英文版dataset

l-name    f-name
Smith     John
Johnson   Anthony
Williams  Ethan

这是英文版的句子

sentence = 'I am going out with John Williams today'

我希望我的输出是这样的

first_name = ['John']
last_name = ['Williams']

【问题讨论】:

如果句子包含多个名字或姓氏怎么办? @TomerS 最好像这样列出他们first_name = ['John', 'Ethan'] 取决于,我的问题是,如果一个句子中存在多个名称怎么办?输出会是什么? 【参考方案1】:

只需从每列中获取名称列表,然后检查字符串是否包含这些列表中的任何元素。

import pandas as pd 

names = [['John', 'Smith'], ['Anthony', 'Johnson'], ['Ethan', 'Williams']]
df = pd.DataFrame(names, columns = ['f_name', 'l_name'])


fname_list = df['f_name'].to_list()
lname_list = df['l_name'].to_list()

sentence = 'I am going out with John Williams today'
sentence = sentence.split()

fname_exist = [e for e in sentence if(e in fname_list)]
lname_exist = [e for e in sentence if(e in lname_list)]

if(len(fname_exist) > 0 and len(lname_exist) > 0):
    print('first name: ' + fname_exist[0])
    print('last name name: ' + lname_exist[0])

输出:

first name: John
last name: Williams

【讨论】:

【参考方案2】:

如果您想以一种天真的方式处理此问题,您可以考虑使用正则表达式,但是这是基于所有名字和姓氏都大写的假设。

sentence = 'I am going out with John Williams today'
name = re.search(r"[A-Z]1[a-z]+ [A-Z]1[a-z]+", sentence).group()
print(name) # Outputs: John Williams

这将搜索一个大写字母,后跟任意数量的小写字母,然后是一个空格,然后是前一个模式的重复。

除此之外,您可以考虑使用命名实体识别 (NER),使用预构建的库来识别文本中的名称。请参阅此处了解更多详情。 https://www.analyticsvidhya.com/blog/2021/06/nlp-application-named-entity-recognition-ner-in-python-with-spacy/

编辑:

我要补充的是,如果同一个句子中有多个名字,你可以申请re.findall()

sentence = 'I am going out with John Williams and William Smith today'
names = re.findall(r"[A-Z]1[a-z]+ [A-Z]1[a-z]+", sentence)
print(names) # Outputs: ['John Williams', 'William Smith']

【讨论】:

以上是关于从句子python(波斯文本)中提取名字和姓氏的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

Python提取包含单词的句子

从 Python 中的非结构化文本中提取一个人的年龄

如何使用 javascript 拆分字符串 - 将名字和姓氏与文本框分开

Oracle中的SQL语句的题目,求解答啊

如何将电子邮件地址中名字和姓氏的第一个字母大写?

从数据框字符串列中提取特定单词并存储在 Python 的新列中