【发布时间】:2019-11-21 23:24:05
【问题描述】:
我正在尝试将正则表达式函数应用于数据框的列以确定性别代词。这是我的数据框的样子:
name Descrip
0 Sarah she doesn't like this because her mum...
1 David he does like it because his dad...
2 Sam they generally don't like it because their par...
这些是我为制作该数据框而运行的代码:
list_label = ["Sarah", "David", "Sam"]
list_descriptions = ["she doesn't like this because her mum...", "he does like it because his dad...", "they generally don't like it because their parent..."]
data3 = {'name':list_label, 'Descrip':list_descriptions}
test_df = pd.DataFrame(data3)
我正在尝试通过在“描述”列上应用正则表达式函数来确定此人的性别。具体来说,这些是我想要实现的模式:
"male":"(he |his |him )",
"female":"(she |her |hers )",
"plural, or singular non-binary":"(they |them |their )"
我写的完整代码如下:
此函数尝试匹配每个模式并返回在行值描述中最常提及的性别代词的名称。每个性别代词在模式字符串中都有几个关键词(例如,他、她、他们)。这个想法是确定 max_gender 或与在描述列中的值中最常提到的模式组相关联的性别。因此,max_gender 可以采用以下三个值之一:male |女|复数,或单数非二进制。如果在 Descrip 行值中没有识别出任何模式,则将返回“未知”。
import re
def get_pronouns(text):
patterns = {
"male":"(he |his |him )",
"female":"(she |her |hers )",
"plural, or singular non-binary":"(they |them |their )"
}
max_gender = "unknown"
max_gender_count = 0
for gender in patterns:
pattern = re.compile(gender)
mentions = re.findall(pattern, text)
count_mentions = len(mentions)
if count_mentions > max_gender_count:
max_gender_count = count_mentions
max_gender = gender
return max_gender
test_df["pronoun"] = test_df.loc[:, "Descrip"].apply(get_pronouns)
print(test_df)
但是,当我运行代码时,它显然无法确定性别代词。这显示在以下输出中:
name Descrip pronoun
0 Sarah she doesn't like this because her mum... unknown
1 David he does like it because his dad... unknown
2 Sam they generally don't like it because their par... unknown
有人知道我的代码有什么问题吗?
【问题讨论】:
-
您能解释一下您在
get_pronouns()中使用的算法吗?我会试着弄清楚,还有一些其他的事情我会改变。我也很困惑为什么描述被切断了。 -
我添加了一些 cmets -- 谢谢!这是一个示例案例,因此描述被切断的原因。我对完全不同的方法持非常开放的态度。
-
听起来不错,我快完成了。如果您正在寻找不同的方法,那么您可以多谈谈您的实际情况,而不仅仅是示例,这可能会有所帮助。
-
我正在做一个网络抓取练习。具体来说,我正在提取一长串维基百科传记文章的整个文本源。所以我有一个包含两列的数据框。第一栏是文章的名称。第二栏是那篇文章的全部源内容。我需要创建第三列,用于确定文章所针对的人是男性、女性还是复数形式。这就是为什么我需要这个正则表达式代码,将其应用于第二列(内容)以创建第三列(性别代词)。
-
我开始质疑 DataFrame 是否是正确的数据结构。当然,如果您打算操纵结果,您可以让文章文本列保存包含所有文本的字典的键。