为了账号安全,请及时绑定邮箱和手机立即绑定

“计数矢量化器()”在空间上而不是在逗号上拆分

“计数矢量化器()”在空间上而不是在逗号上拆分

慕雪6442864 2022-09-27 15:22:03
因此,在我的数据帧中,我有一列“Actors”,其中包含演员的多个“first_name姓氏”。例如:“丹尼斯·克里斯托弗,丹尼斯·奎德,丹尼尔·斯特恩”作为类型“类别”当我使用它时,会将上述组稀疏为6个单词。我希望该函数不考虑名称之间的''(空格),而只考虑'',因此在前面的示例中,它将稀疏为3个单词。CountVectorizer().fit_transform(df['Actors'])vectorizer = CountVectorizer() Actors_f = vectorizer.fit_transform(df.loc[df['Actors'].notna(), 'Actors'])有没有办法做到这一点?
查看完整描述

4 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

与本问题类似:如何将带小数或逗号的数字视为计数中的一个单词计算器,您必须更改用于标记输入的正则表达式。

文档所述,默认正则表达式为:

token_pattern='(?u)\b\w\w+\b'

哪些匹配:

(/u)- 统一码字符

\b- 字边界(例如空格)

\w- 一个词

\w+- 连续词直到...

\b- 另一个单词边界(例如字符串的末尾)

你需要的是这个:

 token_pattern='(?u)[a-zA-Z][a-z ]+'

特别是,空格字符包含在令牌中,这使得捕获名称+姓氏成为一个标记。

检查正则表达式文档以了解正则表达式的含义。


查看完整回答
反对 回复 2022-09-27
?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

我设法做到了这一点

bigram_vectorizer = CountVectorizer(ngram_range=(2, 2), min_df=1)
bigram_vectorizer.fit_transform(df['Actors'])


查看完整回答
反对 回复 2022-09-27
?
白衣非少年

TA贡献1155条经验 获得超0个赞

可能是一种更具可读性和直观性的方法


import re

re_exp = r"\,"

vectorizer = CountVectorizer(tokenizer=lambda text: re.split(re_exp,text))

“科学学习”文档说


分词器:可调用,默认=无 覆盖字符串分词化步骤,同时保留预处理和 n-gram 生成步骤。仅当分析器 == “单词”时才适用。


查看完整回答
反对 回复 2022-09-27
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

使用下面的分词器在你的情况下按逗号拆分:

矢量化器 = 计数向量器(分词器 = lambda x: x.split(','))


查看完整回答
反对 回复 2022-09-27
  • 4 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号