繁体   English   中英

'CountVectorizer()' 在空格而不是逗号上分割

[英]'CountVectorizer()' splitting on space instead of on comma

因此,在我的 dataframe 中,我有一列“演员”,其中包含多个演员的“名字姓氏”。

例如:“Dennis Christopher,Dennis Quaid,Daniel Stern”作为“类别”类型

当我使用CountVectorizer().fit_transform(df['Actors'])时,它会将上述组稀疏为 6 个单词。 我希望 function 不考虑名称之间的“”(空格),而只考虑“,”,以便在前面的示例中它会稀疏为 3 个单词。

vectorizer = CountVectorizer()
Actors_f = vectorizer.fit_transform(df.loc[df['Actors'].notna(), 'Actors'])

有没有办法做到这一点?

与此问题类似: How to Treat number with decimals or with commas as one word in countVectorizer您必须更改用于标记输入的正则表达式。

正如文档所说,默认的正则表达式是:

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

哪个匹配:

(/u) - unicode 字符

\b - 单词边界(例如空格)

\w - 一个词

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

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

你需要的是这样的:

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

特别是在token中包含了空格字符,使得捕捉name+surname为一个token。

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

我设法做到了

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

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

import re
re_exp = r"\,"
vectorizer = CountVectorizer(tokenizer=lambda text: re.split(re_exp,text))

Scikit-Learn 文档

tokenizer: callable, default=None 覆盖字符串标记化步骤,同时保留预处理和 n-gram 生成步骤。 仅在分析器 == 'word' 时适用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM