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

问题描述 投票:0回答:2

因此,在我的数据框中,我有一个“演员”列,其中包含多个演员的“姓氏姓氏”。

例如:“丹尼斯·克里斯托弗,丹尼斯·奎德,丹尼尔·斯特恩”作为“类别”类型

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

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

有办法吗?

python pandas scikit-learn nlp tokenize
2个回答
1
投票
时,'Dennis Christopher,Dennis Quaid,Daniel Stern'作为类型'category'

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

作为documentation says,默认正则表达式为:

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

哪个匹配:

[(/u)-Unicode字符

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

[\w-一个字

\w+-直至...的相应词

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

您需要的是这个:

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

尤其是,令牌中包含空格字符,使捕获名称+姓氏成为一个令牌。

检查the regular expression documentation正则表达式的含义。


0
投票

我设法做到了

bigram_vectorizer = CountVectorizer(ngram_range=(2, 2), min_df=1)
bigram_vectorizer.fit_transform(df['Actors'])
© www.soinside.com 2019 - 2024. All rights reserved.