Python 如何检查姓氏是否为英文?
我有一个csv文件,它有两列,大约9000行。第1列包含调查中受访者的姓氏,第2列包含调查中受访者的姓氏,因此每一行都是观察结果 这些调查是在一个非常多样化的地方进行的。我正试图找到一种方法来判断受访者的名字是否来源于英语(英国或美国)。他的姓也是 这项任务与我的专业领域相去甚远。在网上阅读了有趣的讨论后。我考虑过三种方法: 1-取一个最常见的三胞胎(英文中通常有3个字母组成的家族)或四胞胎(英文中通常有4个字母组成的家族)的数据集,检查每个名字和姓氏是否包含这些字母家族 2-使用一个英国名字的数据集(比如说XX世纪早期英国最常见的X个名字),并根据与我的数据集的接近程度来匹配这些名字。我认为这些数据集可能很好 3-使用python和一个接口来检测(很可能)英语和非英语 如果有人对此有建议,可以分享经验等,那将是伟大的 我附上了一个数据示例(我编的名称)和预期输出 注:请注意,我非常清楚,根据英语/非英语二分法对名称进行分类并非没有缺点和语义问题Python 如何检查姓氏是否为英文?,python,nltk,wordnet,Python,Nltk,Wordnet,我有一个csv文件,它有两列,大约9000行。第1列包含调查中受访者的姓氏,第2列包含调查中受访者的姓氏,因此每一行都是观察结果 这些调查是在一个非常多样化的地方进行的。我正试图找到一种方法来判断受访者的名字是否来源于英语(英国或美国)。他的姓也是 这项任务与我的专业领域相去甚远。在网上阅读了有趣的讨论后。我考虑过三种方法: 1-取一个最常见的三胞胎(英文中通常有3个字母组成的家族)或四胞胎(英文中通常有4个字母组成的家族)的数据集,检查每个名字和姓氏是否包含这些字母家族 2-使用一个英国名字的
虽然最好的解决方案可能是在BERT或类似语言模型的基础上训练分类模型,但粗略的解决方案是使用零炮分类。下面的示例使用了。它做得相当不错,尽管您会看到一些语义问题弹出:例如,名称Black的分类是likely变形,因为它也是一种颜色
import pandas as pd
from transformers import pipeline
data = [['James', 'Brown'], ['Gerhard', 'Schreuder'], ['Musa', 'Bemba'], ['Morris D.', 'Kemba'], ['Evelyne', 'Fontaine'], ['Max D.', 'Kpali Jr.'], ['Musa', 'Black']]
df = pd.DataFrame(data, columns=['firstname', 'name'])
classifier = pipeline("zero-shot-classification")
firstnames = df['firstname'].tolist()
lastnames = df['name'].tolist()
candidate_labels = ["English or American", "not English or American"]
hypothesis_template = "This name is {}."
results_firstnames = classifier(firstnames, candidate_labels, hypothesis_template=hypothesis_template)
results_lastnames = classifier(lastnames, candidate_labels, hypothesis_template=hypothesis_template)
df['f_english'] = [1 if i['labels'][0] == 'English or American' else 0 for i in results_firstnames ]
df['n_english'] = [1 if i['labels'][0] == 'English or American' else 0 for i in results_lastnames]
df
输出:
| | firstname | name | f_english | n_english |
|---:|:------------|:----------|------------:|------------:|
| 0 | James | Brown | 1 | 1 |
| 1 | Gerhard | Schroeder | 0 | 0 |
| 2 | Musa | Bemba | 0 | 0 |
| 3 | Morris D. | Kemba | 1 | 0 |
| 4 | Evelyne | Fontaine | 1 | 0 |
| 5 | Max D. | Kpali Jr. | 1 | 0 |
| 6 | Musa | Black | 0 | 0 |
不久前我构建了一个非常类似的东西
很酷的问题!我不知道答案,把它记下来看看你最终是如何解决的。一个建议是扩展这种方法,将名称与非英语名称进行匹配,并使用这些信息。这是一个非常好的建议!我已经更新了代码示例,现在你可以一次性运行它。我正在使用pandas来处理csv,你可以使用pandas以如下方式加载csv:
df=pd.read_csv('/Users/marcelcapion/Desktop/names.csv')
;您可以使用df.head()
检查它是否正确加载。如果没有可见的列名,您可以这样设置:df.columns=['firstname',name']
我尝试使用此代码,但我得到的是:知道如何修复此问题吗?没有找到PyTorch、TensorFlow>=2.0或Flax。模型将不可用,只能使用标记器、配置和文件/数据实用程序。回溯(最近一次调用):这似乎是一个问题,并提供了解决方案。但这些是系统特定的问题,与代码无关。您始终可以使用google colab。